2017-06-12 127 views
1

我想使用Keras-rl库(https://github.com/matthiasplappert/keras-rl/blob/master/examples/dqn_atari.py)中的DQN代码和3通道图像(无灰度转换)。3通道图像的卷积层

如何更改代码来做到这一点?我试图删除此行:img = img.resize(INPUT_SHAPE).convert('L') # resize and convert to grayscale但我有尺寸误差..

我加入from keras import backend as K K.set_image_dim_ordering('th') 我更改网络achitecture:

model = Sequential() 
model.add(Permute((3, 1, 2),input_shape=(200,200,3))) 
model.add(Lambda(lambda a: a/255.0)) 
model.add(Conv2D(32, (8, 8), strides=(2, 2), activation=activation)) 
model.add(Conv2D(32, (4, 4), strides=(2, 2), activation=activation)) 
model.add(Conv2D(32, (3, 3), strides=(2, 2), activation=activation)) 
model.add(Conv2D(32, (2, 2), strides=(1, 1), activation=activation)) 
model.add(TimeDistributed(Flatten())) 
model.add(LSTM(128)) 
for i in xrange(nb_layers): 
    model.add(Dense(hidden_size, activation=activation)) 
model.add(Dense(env.action_space.n + 1)) 
model.add(Lambda(lambda a: K.expand_dims(a[:, 0], axis=-1) + a[:, 1:], output_shape=(env.action_space.n,))) 
print(model.summary()) 

但在运行时:

ValueError: Error when checking : expected permute_1_input to have 4 dimensions, but got array with shape (1, 1, 200, 200, 3)

如何处理3通道图像?

+0

用来训练模型的图像阵列的形状是什么? –

+0

图像的形状是(84,84,3) –

+0

这是不可能的,因为您的input_Shape是(200,200,3)。因此,你的图像数组的输入应该是(x,200,200,3)。 x代表图像的数量。 –

回答

0

我在发布的代码中看不到任何错误,但我的猜测是,当您删除调整行时,意外地在上一行初始化图像数组的末尾添加了,。 Python会将img = abc(),解析为img = (abc(),)。该错误与您的5维形状相匹配。