从零开始学TensorFlow

栏目: 数据库 · 发布时间: 5年前

内容简介:只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:最近在学习TensorFlow的相关知识,了解了TensorFlow一些基础的知识,现在周末有空了,就写写一些笔记,记录一下自己的成长~

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star: github.com/ZhongFuChen…

从零开始学TensorFlow

最近在学习TensorFlow的相关知识,了解了TensorFlow一些基础的知识,现在周末有空了,就写写一些笔记,记录一下自己的成长~

总的来说,TensorFlow还是一个比较新的技术,有兴趣的同学不妨跟着我的笔记,一起学学呗(反正没坏处)~

知识背景:没有 Python 基础,没有机器学习基础,可以说是真正从零学TensorFlow的了。

一、安装Tensorflow所需要的环境

1.1安装Python环境

使用环境: Mac

Python有好多个版本,在Mac中自带的Python版本是 2.7 ,但相对而言比较老了。现在一般用 Python3.x 了,本次下载的版本是 3.5.6

我安装Python所使用方法的大致步骤:

.bash_profile
3.X版本python

详情可参考如下的链接(总的来说,我根据下面的教程一下子就安装了我想要的Python版本,还是非常不错的。):

在安装Python的时候也发现了一个小知识点:

  • Mac一般使用bash作为默认的shell,会有好几个环境变量,其中 etc/profile系统级 的,还有几个 用户级别 的环境变量,比如说: ~/.bash_profile
  • 如果修改的是系统级别的环境变量,也就是 etc/profile ,在保存的时候只能是 :wq !覆盖,不然会出现readonly错误

(至于TensorFlow和numpy依赖的下载,这里我就不说了,就两条命令就搞掂啦)

1.2PyCharm编辑器

Java有 IDEA 神器,同样的,Python也有 PyCharm ,同样是JetBrains出产的。

我在之前从来没使用过PyCharm,也没写过一句的Python代码。

把Pycharm安装好了之后,我想当然就 new project 去用了,然后就 next,next,next ,当成IDEA来用。但发现了一个问题:我在之前 明明装好了 TensorFlow和numpy的依赖,在PyCharm环境下却 识别不出来 !在 命令行 窗口下,依赖是存在的!

后来才发现:如果用PyCharm去new一个project,会 默认建一个解析器 在当前的项目目录下。而PyCharm会遵守“就近原则”使用当前项目路径下的解析器。而我们添加的依赖(TensorFlow、numpy)是在我们安装Python的路径下的,这就导致了在命令行下找到依赖,而在PyCharm中找不到依赖。

解决也很简单:在PyCharm 指定 一下我们安装Python的路径,切换一下就好了。

参考资料:

  • 关于pip安装第三方库,但pycharm中却无法识别的问题;以及pycharm安装第三方库的方法解析

二、体验TensorFlow

好的,我们现在已经安装好TensorFlow所需要的环境了!(看起来好简单,但还是花了我不少时间....)

首先我们来看一下这个例子可以干些什么:我们有非常多张的图片( 数据集 ),这些图片有不同的类型(比如衣服、鞋子、裤子, 一共有10种类型 ),把这些数据集扔进我们的神经网络里头,生成出 模型 。有了模型以后,当我们再将类似的图片扔进去,这个模型可以帮我们 预测 这张图片是衣服还是鞋子还是裤子。

从零开始学TensorFlow

随后,我跟着官网的代码跑了一(代码我都只是一步一步 复制粘贴 ),最后跑起来:

# TensorFlow and tf.keras
import tensorflow as tf
from tensorflow import keras

# Helper libraries
import numpy as np

print(tf.__version__)

# 加载数据、区分出测试数据和训练数据
# 注意:如果已经下过,重复下载的话,可能会出现EOFError: Compressed file ended before the end-of-stream marker was reached错误

fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()

# 分类的列表
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

# 查看数据的值
print(train_images.shape)  # 样本的shape(可以看出有多少条样本、维度)
print(len(train_labels))  # label的个数,有多少个样本,就应该有多少个label
print(train_labels)  # label的值,对应上面分类列表(从0到9)


# 对测试数据和训练数据进行预处理(实际上就是归一化)
train_images = train_images / 255.0
test_images = test_images / 255.0

# 设置层  (初始处理)--- 建立神经层
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])


# 损失函数、优化器、指标
model.compile(optimizer=tf.train.AdamOptimizer(),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 将训练集丢进去,训练出模型(Model)
model.fit(train_images, train_labels, epochs=5)

# 将测试数据丢到模型中,评估一下得分(准确率)
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)

# 评估完准确率以后,我们可以对测试数据进行预测
predictions = model.predict(test_images)

# 选第一个样本预测后的得出最有可能结果
print(np.argmax(predictions[0]))

# 对比结果
print(test_labels[0])
复制代码

跑出来的结果:

(后期注释:这是TensorFlow的版本)

1.12.0

(后期注释:这是TensorFlow下载数据集的日志)

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz
32768/29515 [=================================] - 0s 3us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz

26427392/26421880 [==============================] - 12s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz
8192/5148 [===============================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz

4423680/4422102 [==============================] - 2s 0us/step
复制代码

(后期注释:样本的shape)

(60000, 28, 28)

(后期注释:样本有多少条,对应的label就有多少条)

60000

(后期注释:label的值是从0-9,表示有九种类别)

[9 0 0 ... 3 0 5]

(后期注释:开始训练)

Epoch 1/5
2019-02-19 14:00:46.842852: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA

60000/60000 [==============================] - 4s 65us/step - loss: 0.4995 - acc: 0.8246
Epoch 2/5
60000/60000 [==============================] - 4s 62us/step - loss: 0.3734 - acc: 0.8655
Epoch 3/5
60000/60000 [==============================] - 4s 63us/step - loss: 0.3346 - acc: 0.8788
Epoch 4/5
60000/60000 [==============================] - 4s 63us/step - loss: 0.3102 - acc: 0.8861
Epoch 5/5
60000/60000 [==============================] - 4s 63us/step - loss: 0.2918 - acc: 0.8916

10000/10000 [==============================] - 0s 36us/step
复制代码

(后期注释:预测出来的精确度)

Test accuracy: 0.8514

(后期注释:选第一个样本进行预测,并对比实际的结果)

9
9
复制代码

参考资料:

2.1总结一下使用TensorFlow的步骤

  1. 加载 数据:使用dataset的api加载数据,并将数据集 分成 训练数据和测试数据
  2. 检查 数据:检查 dataSet 的数据有没有问题(例如,样本的记录数、label的记录数等)
  3. 对数据 预处理 :对测试数据和训练数据进行 归一化 处理,目的:减少因为数值的大小所带来的影响( 一般我们会将值都缩小在一个小的范围内 )
  4. 建立神经网络 :(输入层、隐藏层、输出层)
  5. 为模型定义损失函数、优化器、指标
  6. 将训练数据丢进我们的神经网络中,生成出Model
  7. 将测试数据丢进我们生成好的Model进行 评估 ,预测出我们的准确率

三、TensorFlow介绍

3.1什么是TensorFlow

如果去Google搜关键字“TensorFlow”,那可能你会看到这么一句话:

An open source machine learning framework for everyone.

没错,TensorFlow就是一个机器学习的 框架 。至于框架,相信大家也比较好理解了;类比到Java,比如说我们的Spring框架给我们封装了好多好用的API,简化我们的开发(想想当年写Servlet的时候!)

TensorFlow作为机器学习的框架,同样也给我们封装了好多好用的API,能够 降低 学习机器学习的 门槛

  • 就拿上面的例子来说,没想到 那么少的代码 就可以跑机器学习的“HelloWorld”了!

3.2TensorFlow的架构

我们可以发现上面的Demo所用的基础语言是Python,但不要认为TensorFlow就是Python的一个框架。我看到过一个比喻,觉得写得挺好的,粘贴一下:

Python 和 Tensorflow 之间的联系,可以类比 Javascript 和 HTML 之间的关系。Javascript 是一种全功能的编程语言,可以实现各种出色的效果。HTML 是用于表示某种类型的实用计算抽象(这里指的是可由 Web 浏览器呈现的内容)的框架。Javascript 在交互式网页中的作用是 组装浏览器看到的 HTML 对象 ,然后在需要时通过将其更新为新的 HTML 来与其交互。

下面再来看看TensorFlow的架构图(Python 只是 对TensorFlow进行了封装)

从零开始学TensorFlow

TensorFlow的引擎也是分了很多模块的(这里我们简单了解一下):

从零开始学TensorFlow

最后

总结一下这篇文章:

  • 安装TensorFlow必要的环境
  • 跟着官方文档, 体验 一下TensorFlow(机器学习)的“HelloWorld”
    • 根据给出的例子, 猜出 使用TensorFlow(机器学习)时需要做哪些步骤
  • TensorFlow就是一个机器学习(深度学习)的框架,提供了很多 实用 的API方便我们去玩机器学习(深度学习)。

相信看到这里,很多人都跟我之前一样, 一脸懵逼 。对官方给出的例子中的API不熟悉,去查阅相关资料的时候又发现有好多机器学习相关的 术语 ,对这些术语又不了解。然后就循环懵逼..

while(true){
	// 循环懵逼..
}

复制代码

其实回想 刚学 Java 的时候 ,也是这么一个过程,当你从屏幕看到“HelloWorld”了以后, 大概率 来说也是不了解相关的API具体做了什么事(甚至连API都不知道是啥意思)。但花一段时间去学习了以后,就会发现,原来HelloWorld是真的简单!

public static void main(String[] args) {

    System.out.println("Hello World");

}

复制代码

后续我会继续更新我学习TensorFlow时的一些 笔记 ,有兴趣的小伙伴不妨跟着我一起学习~

另外,从文章的开头我也已经说了,我对Python、机器学习都是没有相关基础的,如果有写错的地方不妨在评论区留言指正。

下一篇预告:TensorFlow是什么意思?Tensor?Flow?介绍TensorFlow一些最基础的知识以及常见的机器学习术语。

乐于输出 干货 的Java技术号:Java3y。号内有200多篇 原创 技术文章、海量视频资源、精美脑图,不妨来 关注 一下!

从零开始学TensorFlow

觉得我的文章写得不错,不妨点一下


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learning Python, 5th Edition

Learning Python, 5th Edition

Mark Lutz / O'Reilly Media / 2013-7-6 / USD 64.99

If you want to write efficient, high-quality code that's easily integrated with other languages and tools, this hands-on book will help you be productive with Python quickly. Learning Python, Fifth Ed......一起来看看 《Learning Python, 5th Edition》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具