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

运行效果图:

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

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值