RNN给出错误ValueError:一个操作没有梯度

时间:2020-06-23 12:32:51

标签: tensorflow keras recurrent-neural-network

深度RNN模型的工作就像一个月前一样。以免它作为另一个项目接手。现在回来并尝试进行训练,我得到了一个错误。 出现错误:

Traceback (most recent call last):

文件“ /home/matiss/.local/share/JetBrains/Toolbox/apps/PyCharm-P/ch-0/201.7223.92/plugins/python/helpers/pydev/_pydevd_bundle/pydevd_exec2.py”,第3行,在Exec中 exec(exp,global_vars,local_vars) 文件“”,第1行,位于 文件“ /home/matiss/Documents/python_work/PycharmProjects/NectCleave/functions.py”,第358行,在weighted_model中 适合的文件“ /usr/local/lib/python3.8/dist-packages/keras/engine/training.py”,第1213行 self._make_train_function() _make_train_function中的文件“ /usr/local/lib/python3.8/dist-packages/keras/engine/training.py”,第314行 training_updates = self.optimizer.get_updates( 包装中的文件“ /usr/local/lib/python3.8/dist-packages/keras/legacy/interfaces.py”,第91行 return func(* args,** kwargs) 文件“ /usr/local/lib/python3.8/dist-packages/keras/backend/tensorflow_backend.py”,第75行,在symbolic_fn_wrapper中 return func(* args,** kwargs) get_updates中的文件“ /usr/local/lib/python3.8/dist-packages/keras/optimizers.py”,第504行 等级= self.get_gradients(损失,参数) 文件“ /usr/local/lib/python3.8/dist-packages/keras/optimizers.py”,第93行,位于get_gradients中 提高ValueError('一个操作具有None用于渐变。 ValueError:操作具有None用于渐变。请确保您所有的操作都定义了渐变(即可区分)。没有渐变的常见操作:K.argmax,K.round,K.eval。

我的模型结构:

def make_model(metrics='', output_bias=None, timesteps=None, features=None):
    from keras import regularizers

    if output_bias is not None:
        output_bias = Constant(output_bias)
    K.clear_session()
    model = Sequential()
    # First LSTM layer
    model.add(
        Bidirectional(LSTM(units=50, return_sequences=True, recurrent_dropout=0.1), input_shape=(timesteps, features)))
    model.add(Dropout(0.5))

    # Second LSTM layer
    model.add(Bidirectional(LSTM(units=50, return_sequences=True)))
    model.add(Dropout(0.5))

    # Third LSTM layer
    model.add(Bidirectional(LSTM(units=50, return_sequences=True)))
    model.add(Dropout(0.5))

    # Forth LSTM layer
    model.add(Bidirectional(LSTM(units=50, return_sequences=False)))
    model.add(Dropout(0.5))

    # First Dense Layer
    model.add(Dense(units=128, kernel_initializer='he_normal', activation='relu'))
    model.add(Dropout(0.5))

    # Adding the output layer
    if output_bias == None:
        model.add(Dense(units=1, activation='sigmoid', kernel_regularizer=regularizers.l2(0.001)))
    else:
        model.add(Dense(units=1, activation='sigmoid',
                        bias_initializer=output_bias, kernel_regularizer=regularizers.l2(0.001)))
    # https://keras.io/api/losses/
    model.compile(optimizer=Adam(lr=1e-3), loss=BinaryCrossentropy(), metrics=metrics)


    return model

请帮助。为什么会这样?

1 个答案:

答案 0 :(得分:0)

好的,所以在经过半天的谷歌搜索和检查后,我找不到解决方案。 然后,我决定只是设置一个新的python虚拟环境,安装所有必需的程序包并进行安装:它可以再次工作。 不知道是什么问题,它是如何发生的,但是现在可以了。

希望这可以为其他遇到相同问题的人节省一些时间。