Tensorflow 尝试使用生成器拟合keras ValueError中的模型:没有为任何变量提供梯度:

Tensorflow 尝试使用生成器拟合keras ValueError中的模型:没有为任何变量提供梯度:,tensorflow,keras,deep-learning,lstm,Tensorflow,Keras,Deep Learning,Lstm,我创建了一个bi LSTM模型 Model: "model" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input (InputLa

我创建了一个bi LSTM模型

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层教师批)