Tensorflow2(预课程)---6.1、fashion minist(服装分类)识别-层方式
Tensorflow2(预课程)---6.1、fashion minist(服装分类)识别-层方式
一、总结
一句话总结:
fashion minist数据集和minist数据集非常像,所以模型也可以直接用minist的,训练的效果还不错
二、fashion minist(服装分类)识别-层方式
博客对应课程的视频位置:
步骤
1、读取数据集
2、拆分数据集(拆分成训练数据集和测试数据集)
3、构建模型
4、训练模型
5、检验模型
需求
fashion minist(服装分类)
Label | Description |
---|---|
0 | T恤(T-shirt/top) |
1 | 裤子(Trouser) |
2 | 套头衫(Pullover) |
3 | 连衣裙(Dress) |
4 | 外套(Coat) |
5 | 凉鞋(Sandal) |
6 | 衬衫(Shirt) |
7 | 运动鞋(Sneaker) |
8 | 包(Bag) |
9 | 靴子(Ankle boot) |
In [1]:
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
1、读取数据集
直接从tensorflow的dataset来读取数据集即可
In [2]:
(train_x, train_y), (test_x, test_y) = tf.keras.datasets.fashion_mnist.load_data()
print(train_x.shape, train_y.shape)
In [3]:
plt.imshow(train_x[0])
plt.show()
In [4]:
plt.figure()
plt.imshow(train_x[1])
plt.figure()
plt.imshow(train_x[2])
plt.show()
In [5]:
print(test_y)
In [6]:
# 像素值 RGB
np.max(train_x[0])
Out[6]:
2、拆分数据集(拆分成训练数据集和测试数据集)
上一步做了拆分数据集的工作
In [7]:
# 图片数据如何归一化
# 直接除255即可
train_x = train_x/255
test_x = test_x/255
In [8]:
# 像素值 RGB
np.max(train_x[0])
Out[8]:
In [9]:
train_y = tf.one_hot(train_y, depth=10)
test_y = tf.one_hot(test_y, depth=10)
print(test_y.shape)
3、构建模型
应该构建一个怎么样的模型:
输入是28*28维,输出是一个label,是一个10分类问题,
需要one_hot编码么,如果是one_hot编码,那么输出是10维
也就是 784->n->10,可以试下784->256->128->10
In [10]:
# 构建容器
model = tf.keras.Sequential()
# 输入层
# 将多维数据(60000, 28, 28)变成一维
# 把图像扁平化成一个向量
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
# 中间层
model.add(tf.keras.layers.Dense(256,activation='relu'))
model.add(tf.keras.layers.Dense(128,activation='relu'))
# 输出层
model.add(tf.keras.layers.Dense(10,activation='softmax'))
# 模型的结构
model.summary()
报如下错误的原因:
ValueError: Input 0 of layer sequential is incompatible with the layer: expected axis -1 of input shape to have value 784 but received input with shape [32, 28, 28]
input层是784,结果送进去的数据却是[32, 28, 28]
model.add(tf.keras.Input(shape=(784,)))
这里是需要用Flatten来打平
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
4、训练模型
In [11]:
# 配置优化函数和损失器
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['acc'])
# 开始训练
history = model.fit(train_x,train_y,epochs=50,validation_data=(test_x,test_y))
In [12]:
plt.plot(history.epoch,history.history.get('loss'))
plt.title("train data loss")
plt.show()
In [13]:
plt.plot(history.epoch,history.history.get('val_loss'))
plt.title("test data loss")
plt.show()
In [14]:
plt.plot(history.epoch,history.history.get('acc'))
plt.title("train data acc")
plt.show()
In [15]:
plt.plot(history.epoch,history.history.get('val_acc'))
plt.title("test data acc")
plt.show()
5、检验模型
In [16]:
# 看一下模型的预测能力
pridict_y=model.predict(test_x)
print(pridict_y)
print(test_y)
In [17]:
# 在pridict_y中找最大值的索引,横向
pridict_y = tf.argmax(pridict_y, axis=1)
print(pridict_y)
#
test_y = tf.argmax(test_y, axis=1)
print(test_y)
In [18]:
plt.figure()
plt.imshow(test_x[0])
plt.figure()
plt.imshow(test_x[1])
plt.figure()
plt.imshow(test_x[2])
plt.figure()
plt.imshow(test_x[3])
plt.show()
In [ ]:
版权申明:欢迎转载,但请注明出处
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。
在校每年国奖、专业第一,加拿大留学,先后工作于华东师范大学和香港教育大学。
2024-09-05:27岁,宅加太忙,特此在网上找女朋友,vx:fan404006308
AI交流资料群:753014672