簡體   English   中英

Python,Tensorflow ValueError:沒有為任何變量提供梯度

[英]Python, Tensorflow ValueError: No gradients provided for any variable

我有一個名為 RL_Brain 的RL_Brain

class RL_Brain():
    def __init__(self, n_features, n_action, memory_size=10, batch_size=32, gamma=0.9, fi_size=10):
        self.n_features = n_features
        self.n_actions = n_action

        self.encoder = keras.Sequential([
            Input((self.n_features,)),
            Dense(16, activation='relu', kernel_initializer='glorot_normal', name='encoder_1'),
            Dense(16, activation='relu', kernel_initializer='glorot_normal', name='encoder_2'),
            Dense(16, activation='relu', kernel_initializer='glorot_normal', name='encoder_3'),
            Dense(self.fi_size, activation='softmax', name='fi'),
        ])

        self.decoder = keras.Sequential([
            Input((self.fi_size,)),
            Dense(16, activation='relu', name='decoder_1', trainable=True),
            Dense(16, activation='relu', name='decoder_2', trainable=True),
            Dense(16, activation='relu', name='decoder_3', trainable=True),
            Dense(self.n_features, activation=None, name='decoder_output', trainable=True)
        ])

    def learn(self, state, r, a, state_):
        encoded = tf.one_hot(tf.argmax(self.encoder(state), axis=1), depth=self.fi_size)
        encoded_ = tf.one_hot(tf.argmax(self.encoder(state_), axis=1), depth=self.fi_size)
        decoded_state = self.decoder(encoded).numpy()
        with tf.GradientTape() as tape:
            loss1 = mean_squared_error(state, decoded_state)
        grads = tape.gradient(loss1, self.decoder.trainable_variables)
        self.opt.apply_gradients(zip(grads, self.decoder.trainable_variables))

當我運行learn function 時,我收到以下錯誤:

File "/Users/wangheng/app/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/optimizer_v2/utils.py", line 78, in filter_empty_gradients raise ValueError("No gradients provided for any variable: %s." % ...

ValueError: No gradients provided for any variable: ['decoder_1/kernel:0', 'decoder_1/bias:0', 'decoder_2/kernel:0', 'decoder_2/bias:0', 'decoder_3/kernel:0', 'decoder_3/bias:0', 'decoder_output/kernel:0', 'decoder_output/bias:0'].

以下行導致該錯誤

decoded_state = self.decoder(encoded).numpy()

一旦這樣做,就沒有從損失 function 到可訓練變量的路徑,因此無法計算梯度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM