从1开始Tensorflow——2.图片多分类模型(垃圾分类,验证码识别基础)

本次需要用到数据集FashionMNIST,不过新人们不要担心,这不需要去自己寻找。使用这个数据集只需要运行下面的代码,就可以自动加载了(首次使用会自动下载,之后使用就不需要啦!)

如果有小伙伴需要更深入的了解这个数据集:点我点我!!!

目录

1.数据集准备

2.构建神经网络模型


1.数据集准备

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])

运行效果图:

从1开始Tensorflow——2.图片多分类模型(垃圾分类,验证码识别基础)_第1张图片

2.构建神经网络模型

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])

 

你可能感兴趣的:(神经网络学习笔记,tensorflow,分类,深度学习)