我正在玩一个模型,该模型应该以8x8的国际象棋棋盘作为输入,编码为224x224的灰度图像,然后输出64x13的一维编码逻辑回归=正方形上的棋子概率。
现在,在卷积层之后,我还不太清楚,如何继续获得2D密集层作为结果/目标。
我尝试在序列模型中添加一个Dense(64,13)作为图层,但是出现错误“ Dense`只能接受1个位置参数('units',”)
是否有可能训练2D目标?
EDIT1: 这是我的代码的相关部分,简化了:
# X.shape = (10000, 224, 224, 1)
# Y.shape = (10000, 64, 13)
model = Sequential([
Conv2D(8, (3,3), activation='relu', input_shape=(224, 224, 1)),
Conv2D(8, (3,3), activation='relu'),
# some more repetitive Conv + Pooling Layers here
Flatten(),
Dense(64,13)
])
TypeError:
Dense
只能接受1个位置参数('units',),但是您传递了以下位置参数:[64,13]
EDIT2:正如Anand V. Singh所建议的,我将Dense(64,13)更改为Dense(832),效果很好。损失=毫秒。
使用“ sparse_categorical_crossentropy”作为损失和64x1编码(而不是64x13)会更好吗?
答案 0 :(得分:1)
在“密集”中,您仅传递希望作为输出的层数,如果您希望将(64x13)作为输出,则将层尺寸设置为Dense(832)
(64x13 = 832),然后稍后重塑形状。您还需要调整Y的形状,以便准确计算损耗,该损耗将用于反向传播。
# X.shape = (10000, 224, 224, 1)
# Y.shape = (10000, 64, 13)
Y = Y.reshape(10000, 64*13)
model = Sequential([
Conv2D(8, (3,3), activation='relu', input_shape=(224, 224, 1)),
Conv2D(8, (3,3), activation='relu'),
# some more repetitive Conv + Pooling Layers here
Flatten(),
Dense(64*13)
])
如果它没有发布失败的地方,那应该可以完成工作,我们可以继续进行下去。
答案 1 :(得分:0)
Reshape
层允许您控制输出形状。
Flatten(),
Dense(64*13)
Reshape((64,13))#2D