TensorFlow2,官网上的代码有错误吗??排这个雷又花了好多时间

书接前文,好不容易把TensorFlow2GPU环境配好,开始试代码,参照一位高人的例子开始动手:

原文在此

小例子运行成功。

Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 3s 46us/sample - loss: 0.4979 - accuracy: 0.8257
Epoch 2/5
60000/60000 [==============================] - 3s 44us/sample - loss: 0.3735 - accuracy: 0.8644
Epoch 3/5
60000/60000 [==============================] - 3s 44us/sample - loss: 0.3330 - accuracy: 0.8788
Epoch 4/5
60000/60000 [==============================] - 3s 44us/sample - loss: 0.3128 - accuracy: 0.8861
Epoch 5/5
60000/60000 [==============================] - 3s 44us/sample - loss: 0.2904 - accuracy: 0.8938

继续探索,发现此例子脱胎于谷歌TensorFlow2官网上的教程,心里对作者产生一点鄙夷,于是干脆去对照官网的例子 官网例子点这 去重头研读,收获更丰,心满意足。可以代码改来改去突然坏掉了,结果如下。

model.fit(train_images, train_labels, epochs=5)
Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 3s 51us/sample - loss: 2.3300 - accuracy: 0.1532
Epoch 2/5
60000/60000 [==============================] - 3s 48us/sample - loss: 2.3026 - accuracy: 0.2064
Epoch 3/5
60000/60000 [==============================] - 3s 48us/sample - loss: 2.3026 - accuracy: 0.2064
Epoch 4/5
60000/60000 [==============================] - 3s 49us/sample - loss: 2.3026 - accuracy: 0.2064
Epoch 5/5
60000/60000 [==============================] - 3s 50us/sample - loss: 2.3026 - accuracy: 0.2064

识别准确率只有20%,loss大道到2。明显是哪里有问题,而且错误很严重,有可能是数据不小心被我改坏了,因为跟师弟聊过数据除以255的问题,也有可能是网络结构被我改坏了。这两个问题分别排查,发现官网上model.fit之后model.fit,最后再probability_model.predict,predict之前加上了一层

probability_model = tf.keras.Sequential([model,tf.keras.layers.Softmax()])

而加之前仅仅是

model = keras.Sequential(
[
    layers.Flatten(input_shape=[28, 28]),
    layers.Dense(128, activation='relu'),
    layers.Dense(10)
])

此处与csdn上的例子不同。于是改回去,加上最后一个全连接层的激活函数

layers.Dense(10, activation='softmax')

心里估计这下百分百没问题了,结果运行之后故障依旧
在这里插入图片描述红了一大片,不知怎么回事儿,心烦地睡去。
隔日开机继续排查,想来想去还是网络结构有问题的可能性最大,加激活与不加,继续试,问题竟然解决了,但是如图所示,得到的数值结果不接近1,只是明显不其他类别大一些而已,也就是说蓝色柱子比较矮。
在这里插入图片描述
继续排查,发现要得到官网上的结果应该将官网代码model和probability_model分别改为:

model = keras.Sequential(
[
    layers.Flatten(input_shape=[28, 28]),
    layers.Dense(128, activation='relu'),
    layers.Dense(10,activation='softmax')
    #layers.Dense(10)
])
probability_model = model

此时才能得到与官网一致的结果:
在这里插入图片描述
几点思考

  1. 为什么第一天发现网络结构有问题,改正后运行看不到效果。
  2. 难道官网代码有误(2020年3月16日版本)?而csdn那位博主改对了?因为他的预测是这么写的predictions = model.predict(test_images)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值