質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

3803閲覧

AttributeError: 'str' object has no attribute 'backward'の解消方法について教えて下さい

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/29 06:48

https://qiita.com/takubb/items/fd972f0ac3dba909c293
をGoogleColabを利用して学習していましたが、順番に処理を実行したところエラーが発生して先に進めません。(同様の質問がshikinamiさまから出ていますが、参照しても解決しませんでした)
レベルが低いのは承知の上で、エラー解消方法をどなたかご教示ください。

発生している問題・エラーメッセージ

AttributeError Traceback (most recent call last) <ipython-input-21-71601c2017dc> in <module>() 5 6 for epoch in range(max_epoch): ----> 7 train_ = train(model) 8 test_ = train(model) 9 train_loss_.append(train_) <ipython-input-20-c19e951568be> in train(model) 12 optimizer.zero_grad() 13 loss, logits = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels) ---> 14 loss.backward 15 torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0) 16 optimizer.step() AttributeError: 'str' object has no attribute 'backward'

該当のソースコード

Python

1# 最適化手法の設定 2optimizer = AdamW(model.parameters(), lr=2e-5) 3 4# 訓練パートの定義 5def train(model): 6 model.train() # 訓練モードで実行 7 train_loss = 0 8 for batch in train_dataloader:# train_dataloaderはword_id, mask, labelを出力する点に注意 9 b_input_ids = batch[0].to(device) 10 b_input_mask = batch[1].to(device) 11 b_labels = batch[2].to(device) 12 optimizer.zero_grad() 13 loss, logits = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels) 14 loss.backward() 15 torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0) 16 optimizer.step() 17 train_loss += loss.item() 18 return train_loss 19 20# テストパートの定義 21def validation(model): 22 model.eval()# 訓練モードをオフ 23 val_loss = 0 24 with torch.no_grad(): # 勾配を計算しない 25 for batch in validation_dataloader: 26 b_input_ids = batch[0].to(device) 27 b_input_mask = batch[1].to(device) 28 b_labels = batch[2].to(device) 29 with torch.no_grad(): 30 (loss, logits) = model(b_input_ids, 31 token_type_ids=None, 32 attention_mask=b_input_mask, 33 labels=b_labels) 34 val_loss += loss.item() 35 return val_loss 36 37# 学習の実行 38max_epoch = 4 39train_loss_ = [] 40test_loss_ = [] 41 42for epoch in range(max_epoch): 43 train_ = train(model) 44 test_ = train(model) 45 train_loss_.append(train_) 46 test_loss_.append(test_) 47

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

私も同じサイトで試して同じエラーに悩まされました。
以下で無事解決できたので動作するコードを共有します。

動作するコード

python

1# 最適化手法の設定 2optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5) 3 4# 訓練パートの定義 5def train(model): 6 model.train() # 訓練モードで実行 7 train_loss = 0 8 for batch in train_dataloader: # train_dataloaderはword_id, mask, labelを出力する点に注意 9 b_input_ids = batch[0].to(device) 10 b_input_mask = batch[1].to(device) 11 b_labels = batch[2].to(device) 12 optimizer.zero_grad() 13 loss = model(b_input_ids, 14 token_type_ids=None, 15 attention_mask=b_input_mask, 16 labels=b_labels).loss # 戻り値とここを修正 17 loss.backward() 18 torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0) 19 optimizer.step() 20 train_loss += loss.item() 21 return train_loss 22 23# テストパートの定義 24def validation(model): 25 model.eval() # 訓練モードをオフ 26 val_loss = 0 27 with torch.no_grad(): # 勾配を計算しない 28 for batch in validation_dataloader: 29 b_input_ids = batch[0].to(device) 30 b_input_mask = batch[1].to(device) 31 b_labels = batch[2].to(device) 32 with torch.no_grad(): 33 loss = model(b_input_ids, 34 token_type_ids=None, 35 attention_mask=b_input_mask, 36 labels=b_labels).loss # 戻り値とここを修正 37 val_loss += loss.item() 38 return val_loss

参考サイト

今回のエラーはmodel()の戻り値が原因だったため、それが何か調べた結果下記ドキュメントに行き着き解決しました。
https://huggingface.co/docs/transformers/model_doc/bert#transformers.BertForSequenceClassification.forward.example-4

投稿2022/08/09 16:44

k-ishida

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問