开发者学堂课程【Tensorflow 2.0入门与实战:Softmax 多分类的代码实现】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/664/detail/11106
Softmax多分类的代码实现
内容介绍
一.数据集的形状
二.如何把数据归一化
三.建立模型分类
一.数据集的形状
train_image 的形状,60000张28*28的图片。train_lable 的形状有60000个标签 。
test_image test_label 的形状分别是10000张28*28的图片和10000个标签。
In [5]: train_image. shape
Out[5]:(60000,28,28)
In [6]: train lable.shape
Out[6]:(60000,)
In [7]: test_image.shape, test_label. shape
Out[7]:((10000,28,28),(10000,))
使用 plt.imshow 切出第一张图片
Image[0]的取值,大部分都是0
使用 np.max 取最大值为255,所以图片的取值范围在0到255之间。
In [13]: np.max(train_image[0]
Out[13]: 255
trainclable 的取值
In [16]: train_lable
Out[16]: array([9,0,0,..., 3,0,5],dtype=uint8)
二.如何把数据归一化
train_image 取值是从0到255所以将数据除以255,取值范围变为从0到1。用 test_image 除以255。
In [17]: train_image=trainimage/255
test_image=test_image/255
In [18]: train_image.shape
Out[18]:(60000,28,28)
三.建立模型分类
1.建立 Sequential 模型
2.添加层
第一层需要将二维的数据变为一维的所以需要添加 Flatten 层,
input_shape =28,28
添加 Dense 层输出128个隐藏单元。使用 relu 进行激活。
注意:
Dense 层隐藏单元不能太少,会舍弃很多有用的信息,太大会过拟合。
输出层要输出10个概率值,使用 softmax 激活。softmax 的作用是将10个输出变成概率分布,10个概率分布和为1。
In [19]: model =tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28))#28*28 model.add(tf.keraslavers.Dense(128,activation=’relu’) )
model.add(tf.keras.layers.Dense(10,activation=’softmax’))
3.编译模型
使用当使用数字编码的时候损失函数使用
sparse_categorical_crossentropy
In [20]: model.compile(optimizer='adam',
loss=' sparse_categorical_crossentropy’
metrics=['acc']
4. train训练
In [*]: model.fit(train_image,train_lable,epochs=5 )
Epoch 1/5
60000/60000[==============================]-2s39us/sample-loss:0.5014I-acc:0.8231
Epoch 2/5
60000/60000[==============================]-2s36us/sample-loss:0.3730-acc:0.8665
Epoch 3/5
60000/60000[==============================]-2s36us/sample-loss:0.3371-acc:0.8
5.test评价
在 test 上进行评价,达到87%的正确率,loss 为0.34
In[23]: model.evaluate(test_image, test_label)
10000/10000[==============================]-0s26us/sample-loss: 0.3422_ acc:0.8763
Out[23]: [0 34224417579174043,0.8763]