intellij idea使用教程 UEditor Zookeeper使用 远程桌面登陆 uitableview cassandra ios7 cocos2d html5 找公司做网站 jq获取元素宽度 rxjava线程切换 mysql数据库名称 cos图像和sin图像 kali重启网卡 爬虫数据清洗 random函数用法 java正则 java中的抽象类 java入门代码 java中tostring方法 java日期类 java调用方法 java文件删除 java开发语言 linux硬盘 pascal教程 图片链接生成器 pyh 免费脚本 fireworks8序列号 winhex教程 手机电脑模拟器 apihook php随机数 max2014 dns地址 qq网盘在哪里 迅雷去广告 武林外传戟神加点 kb835221
当前位置: 首页 > 学习教程  > 编程语言

【tensorflow2.0】softmax多分类代码实现

2020/11/4 13:53:39 文章标签:

fashion mnist数据集是成为经典mnist数据集的简易替换。mnist数据集包含手写数字(0,1,2等)的图像,这些图像的格式与fashion mnist数据集中使用的服饰图像的格式相同。相对而言,这两个数据集比较简单&#x…

fashion mnist数据集是成为经典mnist数据集的简易替换。mnist数据集包含手写数字(0,1,2等)的图像,这些图像的格式与fashion mnist数据集中使用的服饰图像的格式相同。相对而言,这两个数据集比较简单,适合初学者。

Fashion MNIST数据集包含70000张灰度图像,涵盖裙子、衬衫、裤子、鞋、包等10个类别。
本示例将使用60000张图像训练网络,并使用10000张图像测试学习的网络分类图像的准确率。可以从tensorflow直接访问该数据集,只需要导入和加载数据即可。

(1)
加载数据

import tensorflow as tf
print('Tensorflow Version: {}'.format(tf.__version__))
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
(train_image, train_lable), (test_image, test_label) = tf.keras.datasets.fashion_mnist.load_data()

若第一次使用此数据集,要从国外网站下载,会很慢;也可以直接下载数据集放到c盘的用户-86188-.keras-datasets文件夹中。

train_image.shape

看train_image的形状,输出结果为(60000, 28, 28),即60000张28×28的图片。

看一下train_image的第一张图片:

plt.imshow(train_image[0])

是一张鞋子,train_image内各个点的取值范围均为0-255。
看一下这些点里面的最大值:

np.max(train_image)

本示例输出结果为255.
train_lable代表种类,从0-9有十种分类。

(2)
数据处理:
神经网络比较喜欢固定的输入值,比如在输入前,将数据归一化为0到1之间的数。
对于图像数据而言,归一化的方法就是将此数据除以255:

train_image = train_image / 255
test_image = test_image / 255

这样,train_image 和test_image的取值范围都变成了[0,1]。
再看一看train_image 的形状,因为下面会用到:

train_image.shape

输出结果为(60000, 28, 28)

(3)
建立模型,进行分类:

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape(28,28)))#将图像扁平为28×28的向量
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))#输出10个概率

Dense是把一个一维(张量为1)的数据映射到另一个一维的数据上。
对于二维的数据,需要进行Flatten,将其扁平为一维的。

(4)
编译模型:

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy'
              metrics=['acc']
)

(5)
训练模型:

model.fit(train_image, train_lable, epochs=5)

(6)
评价模型:

model.evaluate(test_image, test_lable)

(7)
转换为独热编码onehot:
仍采用之前的数据集

train_lable_onehot = tf.keras.utils.to_categorical(train_lable)

(8)
预测:

predict = model.predict(test_image)
predict.shape

会输出(10000,10),即10000个长度为10的数据。因为test_image的形状是(10000,28,28),对这10000个图像,每个图像都给出长度为10的向量,代表其分类结果。

predict[0]

会输出一个10维向量。

np.argmax(predict[0])

取出其中的最大的值所在的索引,本案例结果为9.

(9)dropout:

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))  # 28*28
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(10, activation='softmax'))

Drpout()有一个参数rate,应是0到1之间的值,代表需要丢弃掉多少数值。Dropout(0.5)代表激活50%,丢弃50%的数据。


本文链接: http://www.dtmao.cc/news_show_350027.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?