model = None
batch_generator = None
for sequence_length in all_sequence_length:
for label_periods in all_label_periods:
for num_layers in all_num_layers:
for num_units in all_num_units:
loadFiles()
createmodel()
trainmodel()
第一次迭代创建如下模型:
Layer (type) Output Shape Param #
=================================================================
cu_dnnlstm_1 (CuDNNLSTM) (None, 100, 75) 45300
_________________________________________________________________
dropout_1 (Dropout) (None, 100, 75) 0
_________________________________________________________________
cu_dnnlstm_2 (CuDNNLSTM) (None, 100, 75) 45600
_________________________________________________________________
dropout_2 (Dropout) (None, 100, 75) 0
_________________________________________________________________
cu_dnnlstm_3 (CuDNNLSTM) (None, 100, 75) 45600
_________________________________________________________________
dropout_3 (Dropout) (None, 100, 75) 0
_________________________________________________________________
cu_dnnlstm_4 (CuDNNLSTM) (None, 100, 75) 45600
_________________________________________________________________
dropout_4 (Dropout) (None, 100, 75) 0
_________________________________________________________________
cu_dnnlstm_5 (CuDNNLSTM) (None, 100, 75) 45600
_________________________________________________________________
dropout_5 (Dropout) (None, 100, 75) 0
_________________________________________________________________
dense_1 (Dense) (None, 3) 228
=================================================================
model.fit_generator()
训练模型,执行良好。然后在下一个循环迭代中再次创建模型,摘要如下所示:
Layer (type) Output Shape Param #
=================================================================
cu_dnnlstm_6 (CuDNNLSTM) (None, 100, 75) 45300
_________________________________________________________________
dropout_6 (Dropout) (None, 100, 75) 0
_________________________________________________________________
cu_dnnlstm_7 (CuDNNLSTM) (None, 100, 75) 45600
_________________________________________________________________
dropout_7 (Dropout) (None, 100, 75) 0
_________________________________________________________________
cu_dnnlstm_8 (CuDNNLSTM) (None, 100, 75) 45600
_________________________________________________________________
dropout_8 (Dropout) (None, 100, 75) 0
_________________________________________________________________
cu_dnnlstm_9 (CuDNNLSTM) (None, 100, 75) 45600
_________________________________________________________________
dropout_9 (Dropout) (None, 100, 75) 0
_________________________________________________________________
cu_dnnlstm_10 (CuDNNLSTM) (None, 100, 75) 45600
_________________________________________________________________
dropout_10 (Dropout) (None, 100, 75) 0
_________________________________________________________________
dense_2 (Dense) (None, 3) 228
=================================================================
当我为模型变量创建一个新的序列模型时,您将看到层id增加了,这让我很惊讶,因此我希望得到与第一个相同的摘要。
当我打电话的时候
型号.fit\u发电机()
我得到这个错误:
InvalidArgumentError(回溯见上文):必须输入一个值
对于占位符张量'cu\u dnnlstm\u 1\u input',带有数据类型float和shape
cu_dnnlstm_1_input
,这是第一个迭代模型上的输入,而不是第二个模型上的cu\ U dnnlstm\ U 6。我创建模型的代码是在一个函数中完成的:
def createmodel():
global model
model = Sequential()
model.add( CuDNNLSTM(units=num_units, return_sequences=True, input_shape=(sequence_length, features_size) ) )
for _ in range(num_layers):
model.add( Dropout(dropout_rate) )
model.add( CuDNNLSTM(units=num_units, return_sequences=True) )
model.add( Dropout(dropout_rate) )
model.add( CuDNNLSTM(units=num_units, return_sequences=False) )
model.add( Dropout(dropout_rate) )
model.add( Dense(labels_size) )
model.compile(loss='mean_absolute_error', optimizer='adam')
model.summary()
模型使用以下功能进行训练:
def trainmodel():
global model
model.fit_generator(generator=batch_generator,
epochs=num_epochs,
steps_per_epoch=num_steps_per_epoch,
validation_data=validation_data_tuple,
callbacks=callbacks)