Tensorflow 尝试使用生成器拟合keras ValueError中的模型:没有为任何变量提供梯度:
我创建了一个bi LSTM模型Tensorflow 尝试使用生成器拟合keras ValueError中的模型:没有为任何变量提供梯度:,tensorflow,keras,deep-learning,lstm,Tensorflow,Keras,Deep Learning,Lstm,我创建了一个bi LSTM模型 Model: "model" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input (InputLa
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input (InputLayer) [(None, 32)] 0
_________________________________________________________________
word_embedding (Embedding) (None, 32, 300) 9569400
_________________________________________________________________
dropout (Dropout) (None, 32, 300) 0
_________________________________________________________________
bilstm (Bidirectional) (None, 32, 1200) 4324800
_________________________________________________________________
global_max_pooling1d (Global (None, 1200) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 1200) 0
_________________________________________________________________
dense (Dense) (None, 768) 922368
=================================================================
Total params: 14,816,568
Trainable params: 14,816,568
Non-trainable params: 0
_________________________________________________________________
当我使用来拟合模型时,我的输入无法放入内存
parallel_model.fit(x_teacher, y_layer_teacher, batch_size=batch_size*gpus, verbose=2, epochs=epoch, validation_split=0.2, callbacks=callbacks)
在这之后,我决定走自己的路:
def layer_teacher_generator(X_teacher, y_teacher, y_layer_teacher, batch_size):
start = 0
end = int(batch_size/2)
start_t = 0
end_t = int(batch_size/2)
while 1:
# if end > len(X):
# X_batch = X[len(X)-int(batch_size/2):len(X)]
# y_batch = y[len(y)-int(batch_size/2):len(y)]
# start = 0
# end = int(batch_size/2)
# X, y = shuffle(X, y, random_state=42)
# else:
# X_batch = X[start:end]
# y_batch = y[start:end]
# start = end
# end += int(batch_size/2)
if end_t > len(X_teacher):
X_teacher_batch = X_teacher[len(X_teacher)-int(batch_size/2):len(X_teacher)]
y_teacher_batch = y_teacher[len(y_teacher)-int(batch_size/2):len(y_teacher)]
y_layer_teacher_batch = y_layer_teacher[len(y_layer_teacher)-int(batch_size/2):len(y_layer_teacher)]
start_t = 0
end_t = int(batch_size/2)
X_teacher, y_teacher, y_layer_teacher = shuffle(X_teacher, y_teacher, y_layer_teacher, random_state=42)
else:
X_teacher_batch = X_teacher[start_t:end_t]
y_teacher_batch = y_teacher[start_t:end_t]
y_layer_teacher_batch = y_layer_teacher[start_t:end_t]
start_t = end_t
end_t += int(batch_size/2)
yield [X_teacher_batch, y_layer_teacher_batch]
现在我用这个发电机来训练我的模型
gen_1 = layer_teacher_generator(X_teacher, y_teacher, y_layer_teacher, batch_size)
parallel_model.fit(gen_1, verbose=2, epochs=epoch, callbacks=callbacks)
但现在我得到了这个错误:
ValueError: No gradients provided for any variable: ['word_embedding/embeddings:0', 'bilstm/forward_lstm/lstm_cell_1/kernel:0', 'bilstm/forward_lstm/lstm_cell_1/recurrent_kernel:0', 'bilstm/forward_lstm/lstm_cell_1/bias:0', 'bilstm/backward_lstm/lstm_cell_2/kernel:0', 'bilstm/backward_lstm/lstm_cell_2/recurrent_kernel:0', 'bilstm/backward_lstm/lstm_cell_2/bias:0', 'dense/kernel:0', 'dense/bias:0'].
我使用的是tensorflow 2,所以这里仅使用model.fit而不是fit\u生成器
你能帮我调试一下吗?或者告诉我发生这种情况的原因。
如何处理此类错误?问题已解决:我必须从生成器返回元组,而不是列表[X\U教师批,y\U层教师批]=>(X\U教师批,y\U层教师批)