我想使用Keras构建CNN-LSTM网络。但是,我无法为第一层的actionValidate
参数找到正确的形状。
我的public function actionValidate($id)
{
$model = $this->findModel($id);
$query = new purchases::find()->where('purchase_id' = :id);
echo $query->createCommand()->sql;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->purchase_id]);
}
return $this->render('validate', [
'model' => $model,
]);
}
是input_shape
形状的ndarray; 1433张尺寸为32x32的照片。
在this example中找到,我尝试使用train_data
,这导致与(1433, 32, 32)
相同的错误:
IndexError:列表索引超出范围
相关代码是:
input_shape=train_data.shape[1:]
我发现这个错误的所有结果都是在不同的情况下产生的;不是通过input_shape=train_data.shape
。那么我该如何塑造我的输入?我是否必须在完全不同的地方寻找错误?
更新 完成错误:
train_data, train_labels = get_training_data()
# train_data = train_data.reshape(train_data.shape + (1,))
model = Sequential()
model.add(TimeDistributed(Conv2D(
CONV_FILTER_SIZE[0],
CONV_KERNEL_SIZE,
activation="relu",
padding="same"),
input_shape=train_data.shape[1:]))
答案 0 :(得分:4)
当TimeDistributed
图层与Conv2D
图层结合使用时,似乎input_shape
至少需要一个长度为4的元组:input_shape = (number_of_timesteps, height, width, number_of_channels)
。
您可以尝试修改代码,例如:
model = Sequential()
model.add(TimeDistributed(Conv2D(
CONV_FILTER_SIZE[0],
CONV_KERNEL_SIZE,
activation="relu",
padding="same"),
input_shape=(None, 32, 32, 1))
更多信息here。