目录
- 1 简介
- 2 开始编码
- 3 设计模型
- 4 编译和训练模型
- 5 模型测试
1 简介
在本章,我们将超越实验1中TensorFlow的基本Hello World,并将应用所学到的知识来创建可识别服装项目的计算机视觉模型。
2 开始编码
# 查看一下TensorFlow的版本信息
import tensorflow as tf
print(tf.__version__)
1.13.1
下面我们将训练神经网络来识别名为Fashion MNIST数据集中的衣物,它包含10种不同 类别的70000件服装,每件衣服都是28×28灰度图像。如下图所示
Fashion MNIST数据集可直接在tf.keras.datasetsAPI中获得
fashion_mnist = tf.keras.datasets.fashion_mnist
在此对象中调用load_data会为你提供两组两个列表:训练值和测试纸,这些值表示服装项目以及标签
(training_images,training_labels),(test_images,test_labels) = fashion_mnist.load_data()
让我们打印一个训练图像和标签来查看
import matplotlib.pyplot as plt
plt.imshow(training_images[0])
print(training_labels[0])
print(training_images[0])
9
[[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 13 73 0
0 1 4 0 0 0 0 1 1 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 3 0 36 136 127 62
54 0 0 0 1 3 4 0 0 3]
[ 0 0 0 0 0 0 0 0 0 0 0 0 6 0 102 204 176 134
144 123 23 0 0 0 0 12 10 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155 236 207 178
107 156 161 109 64 23 77 130 72 15]
[ 0 0 0 0 0 0 0 0 0 0 0 1 0 69 207 223 218 216
216 163 127 121 122 146 141 88 172 66]
[ 0 0 0 0 0 0 0 0 0 1 1 1 0 200 232 232 233 229
223 223 215 213 164 127 123 196 229 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 183 225 216 223 228
235 227 224 222 224 221 223 245 173 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 193 228 218 213 198
180 212 210 211 213 223 220 243 202 0]
[ 0 0 0 0 0 0 0 0 0 1 3 0 12 219 220 212 218 192
169 227 208 218 224 212 226 197 209 52]
[ 0 0 0 0 0 0 0 0 0 0 6 0 99 244 222 220 218 203
198 221 215 213 222 220 245 119 167 56]
[ 0 0 0 0 0 0 0 0 0 4 0 0 55 236 228 230 228 240
232 213 218 223 234 217 217 209 92 0]
[ 0 0 1 4 6 7 2 0 0 0 0 0 237 226 217 223 222 219
222 221 216 223 229 215 218 255 77 0]
[ 0 3 0 0 0 0 0 0 0 62 145 204 228 207 213 221 218 208
211 218 224 223 219 215 224 244 159 0]
[ 0 0 0 0 18 44 82 107 189 228 220 222 217 226 200 205 211 230
224 234 176 188 250 248 233 238 215 0]
[ 0 57 187 208 224 221 224 208 204 214 208 209 200 159 245 193 206 223
255 255 221 234 221 211 220 232 246 0]
[ 3 202 228 224 221 211 211 214 205 205 205 220 240 80 150 255 229 221
188 154 191 210 204 209 222 228 225 0]
[ 98 233 198 210 222 229 229 234 249 220 194 215 217 241 65 73 106 117
168 219 221 215 217 223 223 224 229 29]
[ 75 204 212 204 193 205 211 225 216 185 197 206 198 213 240 195 227 245
239 223 218 212 209 222 220 221 230 67]
[ 48 203 183 194 213 197 185 190 194 192 202 214 219 221 220 236 225 216
199 206 186 181 177 172 181 205 206 115]
[ 0 122 219 193 179 171 183 196 204 210 213 207 211 210 200 196 194 191
195 191 198 192 176 156 167 177 210 92]
[ 0 0 74 189 212 191 175 172 175 181 185 188 189 188 193 198 204 209
210 210 211 188 188 194 192 216 170 0]
[ 2 0 0 0 66 200 222 237 239 242 246 243 244 221 220 193 191 179
182 182 181 176 166 168 99 58 0 0]
[ 0 0 0 0 0 0 0 40 61 44 72 41 35 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0]]
我们可以注意到所有的值都是0到255之间的整数。当训练神经网络时,将所有值都 处理为0到1之间更容易处理,这个 过程称为规范化。
training_images = training_images / 255.0
test_images = test_images / 255.0
3 设计模型
我们可以参考01来设计模型,但是这里不是只有一个神经元,而是有三层。
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128,activation=tf.nn.relu),
tf.keras.layers.Dense(10,activation=tf.nn.softmax)
])
Sequential():定义了神经网络中层的序列
Flatten():展平层,将图形转为一维向量
Dense():全连接层,添加了一层神经元
Relu:if X>0 return X, else return 0.它只将值0或更大值传递给网络中的下一层。
Softmax:采用一组值,并有效的选择最大值。例如,如果最后一层输出为[0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05],保存从哪个最大值的排序,返回[0,0,0,0,1,0,0,0,0]
4 编译和训练模型
现在已经定义了模型,接下来要做的是构建它,
model.compile(optimizer=tf.train.AdamOptimizer(),
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])
model.fit(training_images,training_labels,epochs=5)
Epoch 1/5
60000/60000 [==============================] - 3s 54us/sample - loss: 0.4973 - acc: 0.8259
Epoch 2/5
60000/60000 [==============================] - 3s 54us/sample - loss: 0.3738 - acc: 0.8654
Epoch 3/5
60000/60000 [==============================] - 3s 53us/sample - loss: 0.3341 - acc: 0.8783
Epoch 4/5
60000/60000 [==============================] - 3s 54us/sample - loss: 0.3109 - acc: 0.8859
Epoch 5/5
60000/60000 [==============================] - 3s 52us/sample - loss: 0.2929 - acc: 0.8918
<tensorflow.python.keras.callbacks.History at 0x1bc5efb7780>
模型训练完成后,可以在最高一个时期看到准确率。大约为89%。
5 测试模型
但是模型是如何对未见过的数据执行呢?这就是我们测试集的原因.
model.evaluate(test_images,test_labels)
10000/10000 [==============================] - 0s 35us/sample - loss: 0.3429 - acc: 0.8783
[0.34285926821231844, 0.8783]
在这里,它返回了87.83%.正如预期的那样,模型对未知数据的准确性不如它训练的数据那么准确,

7217

被折叠的 条评论
为什么被折叠?



