形状不匹配、二维输入和二维标签
Shape mismatch, 2D Input & 2D Labels
我想创建一个神经网络,它 - 简单地说 - 从图像(灰度)创建图像
我已经成功创建了一个包含 3200 个输入和输出(标签)图像示例的数据集。
(我知道数据集应该更大,但现在这不是问题)
输入 [Xin] 的大小为 (3200, 50, 30),因为它是 50*30 像素
输出 [yout] 的大小为 (3200, 30, 20) 因为它是 30*20 像素
我想尝试一个完全连接的网络(稍后在 CNN 上)
全连接模型的构建如下所示:
# 5 Create Model
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(256, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(30*20, activation=tf.nn.relu))
#compile the model
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 6 Train the model
model.fit(Xin, yout, epochs=1) #train the model
之后出现以下错误:
ValueError: Shape mismatch: The shape of labels (received (19200,)) should equal the shape of logits except for the last dimension (received (32, 600)).
我已经试过压平你了:
youtflat = yout.transpose(1,0,2).reshape(-1,yout.shape[1]*yout.shape[2])
但这导致了同样的错误
您似乎正在完全展平您的标签 (yout),即,您正在丢失批次维度。如果您原来的 yout 具有 (3200, 30, 20)
的形状,您应该将其重塑为 (3200, 30*20)
的形状,等于 (3200, 600)
:
yout = numpy.reshape((3200, 600))
那么应该可以了
注意
然而,建议的修复只是消除了错误。不过我发现你的方法有很多问题。对于您尝试执行的任务(获取图像作为输出),您不能使用 sparse_categorical_crossentropy
作为损失和 accuracy
作为指标。您应该改用 'mse' 或 'mae'。
我想创建一个神经网络,它 - 简单地说 - 从图像(灰度)创建图像 我已经成功创建了一个包含 3200 个输入和输出(标签)图像示例的数据集。 (我知道数据集应该更大,但现在这不是问题)
输入 [Xin] 的大小为 (3200, 50, 30),因为它是 50*30 像素 输出 [yout] 的大小为 (3200, 30, 20) 因为它是 30*20 像素
我想尝试一个完全连接的网络(稍后在 CNN 上) 全连接模型的构建如下所示:
# 5 Create Model
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(256, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(30*20, activation=tf.nn.relu))
#compile the model
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 6 Train the model
model.fit(Xin, yout, epochs=1) #train the model
之后出现以下错误:
ValueError: Shape mismatch: The shape of labels (received (19200,)) should equal the shape of logits except for the last dimension (received (32, 600)).
我已经试过压平你了:
youtflat = yout.transpose(1,0,2).reshape(-1,yout.shape[1]*yout.shape[2])
但这导致了同样的错误
您似乎正在完全展平您的标签 (yout),即,您正在丢失批次维度。如果您原来的 yout 具有 (3200, 30, 20)
的形状,您应该将其重塑为 (3200, 30*20)
的形状,等于 (3200, 600)
:
yout = numpy.reshape((3200, 600))
那么应该可以了
注意
然而,建议的修复只是消除了错误。不过我发现你的方法有很多问题。对于您尝试执行的任务(获取图像作为输出),您不能使用 sparse_categorical_crossentropy
作为损失和 accuracy
作为指标。您应该改用 'mse' 或 'mae'。