前提・実現したいこと
SeqGAN with keras
上記のmain.ipynbに沿って進めていて、最後まで実行したいと思っています。
発生している問題・エラーメッセージ
エラー文の一番最後の行の「ValueError: tape is required when a Tensor loss is passed.」で詰んでいます。
jupyterNotebook
1--------------------------------------------------------------------------- 2--------------------------------------------------------------------------- 3ValueError Traceback (most recent call last) 4<ipython-input-20-afc062f45054> in <module>() 5 1 trainer = Trainer(B, T, g_E, g_H, d_E, d_H, d_dropout, 6----> 2 g_lr, d_lr, n_sample, generate_samples) 7 85 frames 9/content/sample_data/gdrive/My Drive/Colab Notebooks/SeqGAN3.0/SeqGAN/train.py in __init__(self, B, T, g_E, g_H, d_E, d_H, d_dropout, g_lr, d_lr, n_sample, generate_samples, init_eps) 10 39 shuffle=True) 11 40 self.V = self.g_data.V 12---> 41 self.agent = Agent(sess, B, self.V, g_E, g_H, g_lr) 13 42 self.g_beta = Agent(sess, B, self.V, g_E, g_H, g_lr) 14 43 self.discriminator = Discriminator(self.V, d_E, d_H, d_dropout) 15 16/content/sample_data/gdrive/My Drive/Colab Notebooks/SeqGAN3.0/SeqGAN/rl.py in __init__(self, sess, B, V, E, H, lr) 17 28 self.lr = lr 18 29 self.eps = 0.1 19---> 30 self.generator = Generator(sess, B, V, E, H, lr) 20 31 21 32 def act(self, state, epsilon=0, deterministic=False): 22 23/content/sample_data/gdrive/My Drive/Colab Notebooks/SeqGAN3.0/SeqGAN/models.py in __init__(self, sess, B, V, E, H, lr) 24 52 self.H = H 25 53 self.lr = lr 26---> 54 self._build_gragh() 27 55 self.reset_rnn_state() 28 56 29 30/content/sample_data/gdrive/My Drive/Colab Notebooks/SeqGAN3.0/SeqGAN/models.py in _build_gragh(self) 31 79 loss = - log_prob * reward 32 80 optimizer = tf.keras.optimizers.Adam(learning_rate=self.lr) 33---> 81 minimize = optimizer.minimize(loss, var_list=None) 34 82 35 83 self.state_in = state_in 36 37/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py in minimize(self, loss, var_list, grad_loss, name, tape) 38 519 """ 39 520 grads_and_vars = self._compute_gradients( 40--> 521 loss, var_list=var_list, grad_loss=grad_loss, tape=tape) 41 522 return self.apply_gradients(grads_and_vars, name=name) 42 523 43 44/usr/local/lib/python3.7/dist-packages/keras/optimizer_v2/optimizer_v2.py in _compute_gradients(self, loss, var_list, grad_loss, tape) 45 554 # TODO(joshl): Test that we handle weight decay in a reasonable way. 46 555 if not callable(loss) and tape is None: 47--> 556 raise ValueError("`tape` is required when a `Tensor` loss is passed.") 48 557 tape = tape if tape is not None else tf.GradientTape() 49 558 50 51ValueError: `tape` is required when a `Tensor` loss is passed.
試したこと
エラー文に表示されている、optimizer_v2.pyを少し変えたりしましたが、上手くいきませんでした。
また、あまり変えすぎると動かなくなってしまう可能性があるので、今はデフォルトの状態です。
補足情報(FW/ツールのバージョンなど)
現在、私が使用しているバージョン
・Python 3.7.11
・Keras 2.6.0
・tensorflow 2.6.0
Githubで使用しているバージョン
・Python 3.6.6
・Keras 2.2.2
・tensorflow 1.10.0