本次需要用到数据集FashionMNIST,不过新人们不要担心,这不需要去自己寻找。使用这个数据集只需要运行下面的代码,就可以自动加载了(首次使用会自动下载,之后使用就不需要啦!)
如果有小伙伴需要更深入的了解这个数据集:点我点我!!!
目录
1.数据集准备
2.构建神经网络模型
from tensorflow import keras
fashion_mnist=keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()
如果小伙伴之前没有用过FashionMNIST,那么这串代码将会自动下载数据集到合适的位置。如果已经用过FashionMNIST那么就会将数据集读取出来哦!
不管是在什么环境下,只需要运行这几行代码就可以加载FashionMNIST数据集了是不是很方便!!
准备好数据集之后,检验一下试试:
print(train_images.shape)
#随便选一张画出来
import matplotlib.pyplot as plt
plt.imshow(train_images[1])
plt.show()
print(train_labels[1])
运行效果图:
import tensorflow as tf
from tensorflow import keras
import numpy as np
#首先读取数据
fashion_mnist=keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()
#构建神经元模型
model=keras.Sequential([#一定要记住Sequential哦!
#Flatten函数是用于把多维数组展开成一维数组,图片其实是0~255的数字的矩阵当然是多维的啦
#参数input_shape=(28,28)是用来告诉Flatten函数要处理的数据是28x28的矩阵
keras.layers.Flatten(input_shape=(28,28)),
#添加第一层神经网络,第一个参数数字其实是units=128.代表此层的神经元数量是128个
#activation参数是选择一个激活函数,不同的激活函数有不同的效果。
keras.layers.Dense(128,activation='relu'),
#添加第二层神经网络
#activation选择softmax这是我们要求神经网络用于多分类的关键
keras.layers.Dense(units=10,activation='softmax')
])
#此处读取的数据都除以255因为图像的矩阵中数据都是在0到255之间,所以除以255能实现归一化
#因为笔记是为了速成tensorflow,所以归一化的好处此处不提,新人可自行百度
train_images_scaled=np.array(train_images/255)
#optimizer=“adam”达标选用的优化方式是adam,与第一节里的sgd是同一类东西。目的都是为了更快更好的完成训练
#adam是少数经得住考研的优化算法之一哦,几乎适用于所有情况
#loss选择的'sparse_categorical_crossentropy'这是适用于多分类情况的方法
#还有另一种选择categorical_crossentropy,区别在于:
#带有sparse的输出结果会直接输出标签,例如3
#不带有sparse的输出结果是[0,0,1,0,0,0,0,0,0]也即是在3的位置是1其他位置是0
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
#metrics=['accuracy']表示在训练过程中打印精度
#开始训练,epochs表示训练次数
model.fit(train_images,train_labels,epochs=1)
test_images_scaled=np.array(test_images/255)
model.evaluate(test_images,test_labels)
#第一种写法
# model.predict(tf.reshape(test_images_scaled[0],(1,28,28)))#保持最初读取的数据相同的维度
#第二种写法
# model.predict(test_images_scaled[0:1])#对原数组进行切片相当于不改变维度
print(np.argmax(model.predict(tf.reshape(test_images_scaled[0],(1,28,28)))))#这样打印出来是概率值
print(test_labels[0:1])