赞
踩
活动地址:CSDN21天学习挑战赛
首先来了解一下
TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。
其命名来源于本身的原理,Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算。Tensorflow运行过程就是张量从图的一端流动到另一端的计算过程。张量从图中流过的直观图像是其取名为“TensorFlow”的原因。
张量Tensor:在数学上,张量是N维向量,这意味着张量可以用来表示N维数据集。
计算图(流, flow):流是指一个计算图或简单的一个图,图不能形成环路,图中的每个节点代表一个操作,如加法、减法等。每个操作都会导致新的张量形成。
只要能够将计算表示成为一个数据流图,那么就可以使用TensorFlow。如这个图不就是个神经网络嘛,所以使用TensorFlow框架。
Keras是基于TensorFlow或者Theano框架下的深度学习库,是由纯python编写而成的高层神经网络API,也仅支持python开发。它是为了支持快速实践而对tensorflow或者Theano的再次封装,让我们可以不用关注过多的底层细节,能够把想法快速转换为结果。目前Keras已经被TensorFlow收录,添加到TensorFlow 中,成为其默认的框架,成为TensorFlow官方的高级API。
基于同一套API,但是因为tf.keras中比keras多出了一点特殊的功能,所以可以轻松的将keras程序迁移到tf.keras中,但是tf.keras中的代码并不是全能移动到keras中运行。
规范是相同的,模型导出的格式也是相同的。
TensorFlow
的layers
模块提供用于深度学习的更高层次封装的API
,利用它可以轻松地构建模型。tf.layers
模块提供的方法有:
方法 | 说明 |
---|---|
Input | 用于实例化一个输入Tensor ,作为神经网络的输入 |
average_pooling1d | 一维平均池化层 |
average_pooling2d | 二维平均池化层 |
average_pooling3d | 三维平均池化层 |
batch_normalization | 批量标准化层 |
conv1d | 一维卷积层 |
conv2d | 二维卷积层 |
conv2d_transpose | 二维反卷积层 |
conv3d | 三维卷积层 |
conv3d_transpose | 三维反卷积层 |
dense | 全连接层 |
dropout | Dropout 层 |
flatten | Flatten 层,把一个Tensor 展平 |
max_pooling1d | 一维最大池化层 |
max_pooling2d | 二维最大池化层 |
max_pooling3d | 三维最大池化层 |
separable_conv2d | 二维深度可分离卷积层 |
参数介绍: TensorFlow之神经网络layers模块详解_Never-Giveup的博客-CSDN博客_神经网络layer
Sequential 模型结构: 层(layers)的线性堆栈。简单来说,它是一个简单的线性结构,没有多余分支,是多个网络层的堆叠。
Keras提供了数据集加载函数
- import tensorflow as tf
- from tensorflow.keras import datasets, layers, models
- import matplotlib.pyplot as plt
- import numpy as np
- (train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
查看数据维度
- train_images.shape
- test_images.shape
- train_labels.shape
- test_labels.shape
- '''
- ((60000, 28, 28), (10000, 28, 28), (60000,), (10000,))
- '''
可以看到训练集有60000个28*28的图片,60000个标签,测试集有10000个28*28的图片,10000个标签。
plt.imshow(train_images[0])
查看一下图片是一张图片
train_images[0]
查看一下其取值
查看其最大取值为多少
- print(np.max(train_images))
- print(np.min(train_images))
-
- #255
- #0
那么其取值范围是[0 , 255]之间。
1、在数据预处理时,首先采用reshape函数将每个图像矩阵扁平化成一个向量:
- #调整数据到我们需要的格式
- train_images = train_images.reshape((60000, 28, 28, 1))
- test_images = test_images.reshape((10000, 28, 28, 1))
-
- train_images.shape,test_images.shape,train_labels.shape,test_labels.shape
- """
- 输出:((60000, 28, 28, 1), (10000, 28, 28, 1), (60000,), (10000,))
- """
2、数据归一化,将输入值[0,255]归一化为[0,1]的取值范围:
- # 将像素的值标准化至0到1的区间内。
- train_images, test_images = train_images / 255.0, test_images / 255.0
3、数据可视化
- plt.figure(figsize=(20,10))
- for i in range(20):
- plt.subplot(5,10,i+1)
- plt.xticks([])
- plt.yticks([])
- plt.grid(False)
- plt.imshow(train_images[i], cmap=plt.cm.binary)
- plt.xlabel(train_labels[i])
- plt.show()
- model = models.Sequential([
- layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),#卷积层1,卷积核3*3
- layers.MaxPooling2D((2, 2)), #池化层1,2*2采样
- layers.Conv2D(64, (3, 3), activation='relu'), #卷积层2,卷积核3*3
- layers.MaxPooling2D((2, 2)), #池化层2,2*2采样
-
- layers.Flatten(), #Flatten层,连接卷积层与全连接层
- layers.Dense(64, activation='relu'), #全连接层,特征进一步提取
- layers.Dense(10) #输出层,输出预期结果
- ])
- # 打印网络结构
- model.summary()
- model.compile(optimizer='adam',
- loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
- metrics=['accuracy'])
compile函数设置了学习的目标,其中:
loss:定义了损失函数,
optimizer:指定了优化算法,
metrics:是评价指标
这里设置输入训练数据集(图片及标签)、验证数据集(图片及标签)以及迭代次数epochs
- history = model.fit(train_images, train_labels, epochs=10,
- validation_data=(test_images, test_labels))
调用evaluate函数对测试集进行评估,返回数组score,其中第一维是模型的损失值,第二维是模型评估的精度。
- score= model.evaluate(test_images,test_labels)
- print("Test loss:",score[0])
- print("Test accuracy:",score[1])
输出第一张测试集的预测结果
- plt.imshow(test_images[1])
- pre = model.predict(test_images) # 对所有测试图片进行预测
- pre[1] # 输出第一张图片的预测结果
可以看到在第三个位置的值最大,所以预测的是2
得到预测结果:
- np.argmax([pre[1]])
- #2
查看标签
- test_labels[1]
- #2
预测正确
大家注意收看
>- 本文为[
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/214948
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。