tensorflow学习记录,加载Fashion MNIST数据集,以及构建三层全连接神经元对6000张照片进行训练
首先是导入tensorflow:import tensorflow as tfprint(tf.__version__)加载Fashion MNIST数据集:#加载Fashion MNIST数据集from tensorflow import kerasfashion_mnist = keras.datasets.fashion_mnist #fashion_mnist数据集(train_image
首先是导入tensorflow:
import tensorflow as tf
print(tf.__version__)
加载Fashion MNIST数据集:
#加载Fashion MNIST数据集
from tensorflow import keras
fashion_mnist = keras.datasets.fashion_mnist #fashion_mnist数据集
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()#将数据分成四部分:训练的图片,图片标签,测试的图片,测试的标签
1.查看图片:
运行后可查看要训练/测试的图片,Matplotlib 是一个 Python 的 2D绘图库这里使用到,Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。详情参考菜鸟教程:https://www.runoob.com/matplotlib/matplotlib-pyplot.html
import matplotlib.pyplot as plt
plt.imshow(train_images[1]) #显示第一张训练图片,切分train和test为了验证训练准确度
结果如图,可以看到Fashion MNIST数据集的图片都是28*28的图片
这里运行如下代码可以查看图片库的信息:
print(test_images.shape)
结果如下,表示图片测试库有10000张图,每张大小为28*28.:
查看照片灰度值:
查看测试图片标签:
2.构建神经元
Sequential 序贯模型序贯模型是函数式模型的简略版,为最简单的线性、从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠。可以通过将层的列表传递给Sequential的构造函数,来创建一个Sequential模型。
model=keras.Sequential()
首先指定尺寸,模型需要知道它所期待的输入的尺寸(shape)。出于这个原因,序贯模型中的第一层(只有第一层,因为下面的层可以自动的推断尺寸)需要接收关于其输入尺寸的信息,后面的各个层则可以自动的推导出中间数据的shape,因此不需要为每个层都指定这个参数。
同时这里使用**keras.layers.Flatten(input_shape=[])**用于将输入层的服装图片二维数据压成一维的数据,一般用再卷积层和全连接层之间(因为全连接层只能接收一维数据,而卷积层可以处理二维数据,就是全连接层处理的是向量,而卷积层处理的是矩阵)原理图:

model.add(keras.layers.Flatten(input_shape=(28,28))) #输入层
下面指定某些 2D 层,例如 Dense,支持通过参数 input_dim 指定输入尺寸,某些 3D 时序层支持 input_dim 和 input_length 参数。
这里构建两层神经元
Dense(128) 是一个具有 128 个隐藏神经元的全连接层
Dense(10) 是一个具有 10 个隐藏神经元的全连接层
model.add(keras.layers.Dense(128,activation=tf.nn.relu))#relu函数小于0的值归0大于0的值不变
model.add(keras.layers.Dense(10,activation=tf.nn.softmax))#作用是将一组数转换成预测的概率,原先数值大的数概率会进一步预测较大,原先数值小的数会概率预测变小,且所有预测的概率之和为1,所以该函数常用于分类问题
relu()函数,线性整流函数(Rectified Linear Unit, ReLU):
softmax()函数,或称归一化指数函数,是逻辑函数的一种推广。它能将一个含任意实数的K维向量A “压缩”到另一个K维实向量 A’ 中,使得A’ 每一个元素的范围都在(0,1)之间,并且所有元素的和为1。
详情参考:
https://blog.csdn.net/kevindree/article/details/87365355
在训练模型之前,我们需要配置学习过程,这是通过compile方法完成的,他接收三个参数:
优化器 optimizer:它可以是现有优化器的字符串标识符,如 rmsprop 或 adagrad,也可以是 Optimizer 类的实例。Adam一般来说是收敛最快的优化器
损失函数 loss:模型试图最小化的目标函数。它可以是现有损失函数的字符串标识符,如 categorical_crossentropy 或 mse,也可以是一个目标函数。
评估标准 metrics:对于任何分类问题,你都希望将其设置为 metrics = [‘accuracy’]。评估标准可以是现有的标准的字符串标识符,也可以是自定义的评估标准函数。
训练代码:
train_images=train_images/255#为了使数据尽可能的准,除以255,使数据处于0-1之间
model.compile(optimizer=tf.optimizers.Adam(),loss=tf.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
model.fit(train_images,train_labels,epochs=5)#迭代五次
结果如下:
测试代码:
test_images_scaled=test_images/255
model.evaluate(test_images_scaled,test_labels)
结果,可以看到loss明显比测试的结果高,准确性没有测试结果高,符合测试结果:
进一步预测待更。。
更多推荐




所有评论(0)