import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline

加载fashion_mnist数据集

1
(train_image,train_label),(test_image,test_label) = tf.keras.datasets.fashion_mnist.load_data()

归一化

1
2
3
#归一化处理,从0~1
train_image = train_image /255
test_image = test_image /255

模型建立

1
2
3
4
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个概率分布

模型优化函数等设置

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

模型训练

1
history = model.fit(train_image,train_label,epochs=5)
1
model.evaluate(test_image,test_label)

evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None)
输入数据和标签,输出损失值和选定的指标值(如精确度accuracy)
评估模型,不输出预测结果
loss,accuracy = model.evaluate(X_test,Y_test)
print(‘\ntest loss’,loss)
print(‘accuracy’,accuracy)

model.predict
输入测试数据,输出预测结果 (通常用在需要得到预测结果的时候,比如需要拿到结果来画图)

1.输入输出不同
model.evaluate 输入数据(data)和真实标签(label),然后将预测结果与真实标签相比较,得到两者误差并输出.
model.predict 输入数据(data),输出预测结果

2.是否需要真实标签
model.evaluate 需要,因为需要比较预测结果与真实标签的误差
model.predict 不需要,只是单纯输出预测结果,全程不需要标签的参与。

独热编码

1
2
train_label_onehot = tf.keras.utils.to_categorical(train_label)#由顺序数据集转为独热编码
test_label_onehot = tf.keras.utils.to_categorical(test_label)#由顺序数据集转为独热编码

train_label_onehot array([[0., 0., 0., ..., 0., 0., 1.], [1., 0., 0., ..., 0., 0., 0.], [1., 0., 0., ..., 0., 0., 0.], ..., [0., 0., 0., ..., 0., 0., 0.], [1., 0., 0., ..., 0., 0., 0.], [0., 0., 0., ..., 0., 0., 0.]], dtype=float32)