python - keras “你必须在使用它之前编译你的模型。” 即使在编译之后
问题描述
我正在使用以下代码将我的 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) 我该如何解决这个错误?我觉得我在输入和输出维度上搞砸了,但我不确定。
解决方案
您的代码的问题是您放错了输入形状,因此您的模型无法正确编译。即使这样,我认为您的输入形状也不正确。
你应该使用
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))))
这将解决您当前的错误,因为模型将被编译。而设置正确的输入形状是一个应该单独讨论的话题。
希望这可以帮助
推荐阅读
- typescript - 在 APIGatewayProxyEvent 中,哪个字段会给我 URL?
- javascript - 如果我知道字符串的值,我可以将其直接插入剪贴板而不执行 execCommand('copy')
- android - TensorFlow Lite 2.0 高级 GPU 在 Android 上使用 C++
- c# - 身份在 .NET Core 项目中不起作用
- python - 我怎样才能永远运行一个函数?
- ios - iOS Swift 共享 PDF 文件,然后删除
- javascript - 需要 Websocket onMessage 但值未定义
- python-2.7 - lxml解析器在解析html时删除结束标记
- python - django 小部件调整表单控件而不是操作
- reactjs - 在 react redux 中订购时间戳日期?