2

私は CNN を使用してデータセット (1000,3253) に取り組んできました。勾配テープを使用して勾配計算を実行していますが、メモリが不足し続けています。それでも、勾配計算をリストに追加する行を削除すると、スクリプトはすべてのエポックを実行します。なぜこれが起こるのか完全にはわかりませんが、テンソルフローとグラデーションテープの使用も初めてです。アドバイスやご意見をいただければ幸いです

        #create a batch loop
    for x, y_true in train_dataset:            
        #create a tape to record actions


        with  tf.GradientTape(watch_accessed_variables=False) as tape:
            x_var = tf.Variable(x)
            tape.watch([model.trainable_variables,x_var])    

            y_pred = model(x_var,training=True)    
            tape.stop_recording()
            loss = los_func(y_true, y_pred)
        epoch_loss_avg.update_state(loss)
        epoch_accuracy.update_state(y_true, y_pred)                

        #pdb.set_trace() 
        gradients,something = tape.gradient(loss, (model.trainable_variables,x_var))
        #sa_input.append(tape.gradient(loss, x_var))
        del tape            


        #apply gradients
        sa_input.append(something)
        opti_func.apply_gradients(zip(gradients, model.trainable_variables)) 
    train_loss_results.append(epoch_loss_avg.result())
    train_accuracy_results.append(epoch_accuracy.result())
4

1 に答える 1