【发布时间】:2017-12-06 18:49:56
【问题描述】:
假设我试图从个人资料图片中猜测 AGE。在执行卷积/池化之后,我想在进行最终预测之前添加另一条信息,例如心率。
所以,而不是 profile picture --> Convolutions/Pooling --> 全连接层 --> AGE
我想要: 个人资料图片 --> 卷积/池化 --> 全连接层,其中添加了有关心率的新输入 --> 年龄
为此,我创建了如下函数:
def Add_to_FinalLayers(X, Additional):
X = concatenate([X, Additional])
return X
def AgeModel(input_shape):
X_input = Input(input_shape)
X = ZeroPadding2D((3,3))(X_input)
X = Conv2D(32, (7,7) strides=(1,1), name ='conv0')(X)
X = BatchNormalization(axis =3, name = 'bn0')(X)
X = Activation('relu')(X)
X = MaxPooling2D((2,2), name='max_pool')(X)
X = Flatten()(X)
X = Add_to_FinalLayers(X, HeartRateData_train)
X = Dense(1, activation='linear', name='fc')(X)
model = Model(inputs=[X_input, HeartRate_train], outputs=X, name='AgeModel')
return model
ageModel = AgeModel(X_train.shape[1:])
ageModel.compile(optimizer="RMSprop", loss="mse", metrics=["mse"])
ageModel.fit(x=[X_train,HeartRate_train], y=Y_train, epochs=30, batch_size=32)
preds = happyModel.predict(X_test)
我的数据大小是,
number of training examples = 600
number of test examples = 150
X_train shape: (600, 64, 64, 3)
Y_train shape: (600, 1)
X_test shape: (150, 64, 64, 3)
Y_test shape: (150, 1)
HeartRate_train shape: (600, 1)
HeartRate_test shape: (150, 1)
我收到的错误消息是:
ValueError: Error when checking input: expected input_22 to have shape (None, 10) but got array with shape (600, 1)
ValueError: The model expects 2 arrays, but only received one array. Found: array with shape (150, 64, 64, 3)
ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 arrays) but in stead got the following list of 2 arrays:...
任何建议将不胜感激。谢谢你。
【问题讨论】:
-
首先,您需要将
Heartbeat定义为模型的输入,方法是将其指定为input2 = Input(shape=[1], name='heart_rate')。然后,您可以在 flatten 层之后将其连接为X = Concatenate(name='concat_layer')[X, input_2] -
亲爱的 Nain,感谢您的友好回复。根据您的建议,我在模型定义中添加了 Input2 = Input(shape=[1]) ,然后在展平层之后添加了 X=concatenate(name='concat_layer')[X, Input2] 。但我得到了同样的错误。是不是因为我在这里创建模型实例时只传递了 X_train:ageModel = AgeModel(X_train.shape[1:])?将 X_train 和 HeartRate_train 都传递给 ageModel 的最佳方法是什么?
-
其实,它似乎工作。但是,当我进行预测时,我注意到我需要做
preds = ageModel.predict([X_test, HeartRate_test])。 -
是的,您还需要在测试时发送两个数组(图像和心率),因为当您定义模型时,它接受两个输入和一个输出。如果您的问题得到解决,请告诉我,以便我可以将其放在答案部分
-
嗨,Nain,非常感谢。是的,我听从了您的建议,问题已经解决。 =)
标签: keras keras-layer