keras“使用模型之前,您必须先对其进行编译。”即使编译后

时间:2019-10-19 09:21:26

标签: python tensorflow keras lstm recurrent-neural-network

我正在使用以下代码使我的LSTM网络适合时间序列生成器:

data_gen = TimeseriesGenerator(x_train,y_train,length=10, sampling_rate=2,batch_size=5110)

def rmsle_K(y, y0):
    return K.sqrt(K.mean(K.square(tf.log1p(y) - tf.log1p(y0))))

regressor = Sequential()
regressor.add(Bidirectional(LSTM(units=100,return_sequences= True),input_shape=(x_train.shape[1],12)))
regressor.add(Dropout(0.1))
regressor.add(Bidirectional(LSTM(units=100,return_sequences= True)))
regressor.add(Dropout(0.1))
regressor.add(Bidirectional(LSTM(units=100,return_sequences= True)))
regressor.add(Dropout(0.1))
regressor.add(Dense(units=1))
regressor.compile(loss=keras.losses.mean_squared_logarithmic_error, optimizer='adam', metrics=[rmsle_K])

regressor.fit_generator(data_gen)
  

错误:RuntimeError:您必须在使用模型之前对其进行编译。

x_train.shape =(340,5110,12).y_train.shape =(3400,511,1)如何解决此错误?我觉得我在弄乱输入和输出维度,但不确定。

1 个答案:

答案 0 :(得分:3)

您的代码存在问题,因为您放错了输入形状,因此模型无法正确编译。即使这样,我也不认为您输入的形状正确。

您应该使用

regressor.add(Bidirectional(LSTM(units=100,return_sequences= True),input_shape=(x_train.shape[1],1)))

代替

regressor.add(Bidirectional(LSTM(units=100,return_sequences= True,input_shape=(x_train.shape[1],1))))

这将解决您当前的错误,因为模型将被编译。设置正确的输入形状是一个主题,应单独讨论。

希望这会有所帮助