我使用这个模型将84x84图像作为输入,4个类作为输出:
def __buildModel(self):
model = Sequential()
model.add(Conv2D(16, kernel_size=(8,8), strides=(4,4),
activation='relu',
input_shape=(None,84,84,)))
model.add(Conv2D(32, kernel_size=(4,4), strides=(2,2), activation='relu'))
model.add(Dense(256,activation='relu'))
model.add(Dense(4,activation='linear'))
model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.RMSprop())
return model
我将输入(状态)和输出(动作)塑造成我的想法:
actions = np.zeros((1,1,sampleSize,self.actionSize))
states = np.zeros((1,sampleSize,84,84))
self.model.fit(states,actions,epochs=1)
我收到错误:
ValueError: Error when checking target: expected dense_2 to have shape (None, None, 9, 4) but got array with shape (1, 1, 126, 4)
所以我把它改成了:
actions = np.zeros((1,sampleSize,9,self.actionSize))
但我明白了:
InvalidArgumentError (see above for traceback): Incompatible shapes: [1,79,9,4] vs. [1,8,9,4]
[[Node: loss/dense_2_loss/mul = Mul[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"](_arg_dense_2_target_0_2, loss/dense_2_loss/Log)]]
任何人都知道发生了什么事,或者我在制作模型时犯了错误,我一直试图解决这个问题?感谢
答案 0 :(得分:0)
参见model.summary()
,您将看到模型正在使用的形状。
请注意,订单为(images, side1, side2, channels)
。
您正在反转input_shape
,它应该是input_shape=(84,84,you_need_channels)
。如果图像是B& W,则通道的数量可以是1;如果它们是RGB,则通道的数量可以是3,如果它们具有α通道,则可以是4,等等。
双方将沿着褶皱缩小,因为它们会失去边界。 (您可以在这些图层中使用padding='same'
来阻止这种情况。
另请注意,Dense
图层会保留图像边。
您可以使用Flatten()
图层折叠边(如果您打算使用可变尺寸图像,则可能总是使用sizze 84x84,或GlobalMaxPooling2D()
或GlobalAveragePooling2D()
。 / p>