使用Keras构建CNN模型
问题描述:
你好,我是Keras的新人。我选择keras执行本文:http://mmlab.ie.cuhk.edu.hk/projects/TCDCN.html。我只是将输入大小更改为48x48,然后输出我只需要68个地标坐标。这里是我的网络:使用Keras构建CNN模型
def mtfl40New(size):
model = Sequential()
model.add(Conv2D(16, (5, 5), padding='valid', input_shape=(3, size, size)))
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(48, (3, 3), padding='valid'))
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), padding='valid'))
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (2, 2), padding='valid'))
model.add(Activation('tanh'))
model.add(Flatten())
model.summary()
#model.count_params()
model.add(Dense(100, kernel_initializer="normal", input_shape=(576,)))
model.add(Activation('tanh'))
model.add(Dense(136, kernel_initializer="normal"))
model.add(Activation('tanh'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
return model
答
这又是您的输入形状和格式如何解释之间的不兼容。您已经在Keras配置中将图像排序设置为通道,而输入形状的通道在最后。为了解决这个问题只需更换这行:
model.add(Conv2D(16, (5, 5), padding='valid', input_shape=(3, size, size)))
有了:
model.add(Conv2D(16, (5, 5), padding='valid', input_shape=(size, size, 3)))
你好,谢谢你的解决方案。但是,我仍然有这个问题。 “ValueError:检查模型输入时出错:期望的conv2d_1_input具有形状(无,48,48,3),但获得具有形状的数组(2912L,3L,48L,48L)” 我该如何解决? - 谢谢 - – herleeyandi
@herleeyandi这是一个不同的问题,你应该问完全信息的另一个问题。 –