正在关注TensorFlow教程并且无法获得准确的模型预测

时间:2019-07-05 00:38:50

标签: python tensorflow keras artificial-intelligence

我正在关注tutorial on TensorFlow image classifications

我的用例与本教程略有不同,它使用国际象棋件,而我使用的是交通信号灯,并希望检测它是红色,绿色还是琥珀色。

我发现我的测试结果很差,并且想知道这是否与本教程的CreateData部分中看到的cv2.IMREAD_GRAYSCALE有关。当然,颜色在我的分类器中很重要,所以我想知道教程是否正在转换为灰度,因此我缺乏准确的结果。

因此,我将cv2.IMREAD_GRAYSCALE的所有引用更改为cv2.IMREAD_COLOR,重新运行CreateData例程,然后尝试运行NeuralNetwork创建程序,但随后失败,并出现错误:

  File "CreateNeuralNetwork.py", line 54, in <module>
    history = model.fit(X, y, batch_size=32, epochs=40, validation_split=0.1)
  File "/Users/stuff/Library/Python/2.7/lib/python/site-packages/tensorflow/python/keras/engine/training.py", line 709, in fit
    shuffle=shuffle)
  File "/Users/stuff/Library/Python/2.7/lib/python/site-packages/tensorflow/python/keras/engine/training.py", line 2688, in _standardize_user_data
    training_utils.check_array_lengths(x, y, sample_weights)
  File "/Users/stuff/Library/Python/2.7/lib/python/site-packages/tensorflow/python/keras/engine/training_utils.py", line 483, in check_array_lengths
    'and ' + str(list(set_y)[0]) + ' target samples.')
ValueError: Input arrays should have the same number of samples as target arrays. Found 195 input samples and 65 target samples.

我猜想这改变了我的网络的规模/复杂性,因此在网络创建中出现了问题,有人可以帮助我跟踪它的位置吗(我没有从博客文章中更改任何部分)链接到上面)。

我敢打赌,此位需要更改:

# normalizing data (a pixel goes from 0 to 255)
X = X/255.0

# Building the model
model = Sequential()

# 3 convolutional layers
model.add(Conv2D(32, (3, 3), input_shape = X.shape[1:]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

鉴于灰度像素将为0到255,但彩色像素将远远超过该像素,并且更有可能是RGB矢量。我不确定要去哪里或要改变什么。

我可能是跟踪的方式,思想将不胜感激。

此外,在用直线训练模型时:

history = model.fit(X, y, batch_size=32, epochs=40, validation_split=0.1)

似乎是一个时代,人们需要训练多少次模型。 40次执行400次有好处吗?这些其他参数是否重要?我如何知道我是否“过度训练”了该模型?临界点是什么?

1 个答案:

答案 0 :(得分:2)

很明显,该错误表明该错误将彩色图像的每个通道都视为单独的灰度图像。这就是为什么“找到195个输入样本和65个目标样本”即三倍的原因。因此,您应该查看准备数据的代码。检查第53行

X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 1)

您应该将其更改为

X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 3)

希望这会有所帮助。

关于您的第二个问题“我怎么知道我是否“过度训练”了模型?临界点是什么?”

绘制精度和损耗图,这将使您对偏差和方差有所了解。对于epochs参数的设置,Keras回调可以派上用场。有了它,您可以监视任何数量,例如train_loss,train_acc等,如果数量没有增加,您可以自动停止进一步拟合模型。