【发布时间】:2020-01-04 22:30:29
【问题描述】:
基于矩阵,我试图逼近一个值(回归)。然而,CNN 总是预测一个与predict 的输入相同的矩阵。
我没有收到任何错误。
用于训练的数据(矩阵)存储在一个 numpy 数组中,但我只有大约 9000 个可用样本。每个矩阵的值都存储在一个一维数组中(每个矩阵一个值)。
这是我的模型:
model = keras.Sequential([
layers.Conv2D(64, kernel_size=3, activation='selu', input_shape=(8, 8, 1)),
layers.Conv2D(64, kernel_size=3, activation='selu'),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, kernel_size=2, activation='selu'),
layers.Flatten(),
layers.Dense(1, activation='linear')
])
optimizer = keras.optimizers.RMSprop(0.001)
model.compile(optimizer=optimizer,
loss='mean_squared_error',
metrics=['mean_squared_error'])
model.fit(matrices, values, epochs=10)
test_loss = model.evaluate(test_boards, test_values, verbose=2)
调用prediction = model.predict(some_matrix) 时的示例输出如下所示。在这种情况下,some_matrix 等于下面的输出。
[[ 51. 0. 33. 0. 100. 33. 0. 51.]
[ 10. 10. 10. 0. 0. 10. 10. 10.]
[ 0. 0. 32. 0. 0. 32. 0. 0.]
[ 0. 0. 0. 88. 10. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. -10. 0. -32. 0. 0.]
[ -10. -10. -10. 0. 0. -10. -10. -10.]
[ -51. -32. -33. -88. -100. -33. 0. -51.]]
为了获得单个值作为输出,我缺少什么?或者至少是输入的修改版本?
编辑:
My matrix data(不适合免费的 pastebin 帐户,抱歉)
我没有找到将数据提供给 Google Colab 并将它们包含在链接中的方法,对于给您带来的不便,我深表歉意。
这次我确实遇到了一个错误,我在自己的环境中运行代码时没有遇到这个错误。这绝对是问题所在,但我仍然不知道如何解决这个问题。
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-5-595f98617fa0> in <module>()
97 [ -51, -32, -33, -88, -100, -33, 0, -51,]])
98 print(test_boards[0])
---> 99 prediction = model.predict(test_boards[0])
100 print("Prediction:")
101 print(prediction)
3 frames
/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
561 ': expected ' + names[i] + ' to have ' +
562 str(len(shape)) + ' dimensions, but got array '
--> 563 'with shape ' + str(data_shape))
564 if not check_batch_axis:
565 data_shape = data_shape[1:]
ValueError: Error when checking input: expected conv2d_12_input to have 4 dimensions, but got array with shape (8, 8, 1)
【问题讨论】:
-
没看懂问题,能否提供样例输入输出?它不能预测 8x8x1 矩阵,因为模型只有一个神经元。确保您使用的是正确的模型。
-
感谢您的回复,我也是这么想的。最低代码块的矩阵是我在
predict中用作参数的矩阵。但它返回完全相同的矩阵,没有改变。 -
好吧,老实说,我怀疑它是否会像您描述的那样发生,如果您制作一个我们可以运行的自包含示例,我们可以验证您所说的。
-
这里是 colab colab.research.google.com/drive/…的链接
-
您需要添加样本维度,因此您的数据为(1、8、8、1),因为您只有一个样本。你可以用 np.expand_dims 或 np.reshape 做到这一点
标签: python keras regression conv-neural-network