smly / kaggle-book-gokui

付録コード
MIT License
117 stars 20 forks source link

3.4.2 学習ループでのエラー #34

Closed akasofuanimal closed 7 months ago

akasofuanimal commented 7 months ago

3.4.2の1エポックだけ学習するとことで、 train_subsec5('/kaggle/working', 32, device=device)として実行すると、 setup_train_val_datasetsのlabels = get_labels(dataset)で、下記のエラーとなります。

----> 5 return np.array([img[1] for img in dataset.getitem]) AttributeError: 'ImageFolder' object has no attribute 'getitem'

これが解決できずに苦しんでいます。 お手数ですが、ご確認をお願いできないでしょうか。 よろしくお願いいたします。

upura commented 7 months ago

恐らくですが、train_subsec5 の第一引数である data_dir の指定に誤りがありそうです。'/kaggle/working' を指定されているようですが、この場所に適切にデータセットは配置されているでしょうか?

README では Kaggle Notebook 上でのサンプルコードの実行例も提示しているので、必要に応じてご参照ください。この例では、データセットを展開したのちに --data_dir=../../dogs_vs_cats という指定でコードを実行しています。 https://www.kaggle.com/code/takiba/kaggle-book-gokui-chapter3-dryrun

akasofuanimal commented 7 months ago

とても早いご回答ありがとうございました。 kaggleでのフルパスの指定方法がわからなかったので、google colabで試してみました。 ファイルの存在を下記の通り確認しました。 for dirpath, dirnames, filenames in os.walk('/content', topdown=True): print(f'now in {dirpath}') print(f'dirs in {dirpath}: {dirnames}') print(f'files in {dirpath}: {filenames}')

dirs in /content/train: ['dog', 'cat'] files in /content/train/dog: ['dog.880.jpg', 'dog.4023.jpg', 'dog.8334.jpg', 'dog.6823.jpg', 'dog.686.jpg', ・・・・・・・ files in /content/train/cat: ['cat.7784.jpg', 'cat.8156.jpg', 'cat.8404.jpg', 'cat.7920.jpg', 'cat.11559.jpg', ・・・・・・・

train_subsec5('/content', 32, device=device) このように引数を設定しましたが、同じ結果となりました。

これだけでは難しいと思いますが、よろしくお願いいたします。

upura commented 7 months ago

----> 5 return np.array([img[1] for img in dataset.getitem])

エラーメッセージ内のコードが、このリポジトリ内のコードと一致していないようです(getitemimgs)。この辺りをご確認いただけますでしょうか? https://github.com/smly/kaggle-book-gokui/blob/main/chapter3/train.py#L55

差し支えなければ、Kaggle Notebook や Google Colab のファイル群を公開設定にしていただくと、より具体的に状況を確認できそうです。

akasofuanimal commented 7 months ago

ご指摘の通りでした。ここのコードからコピーしたはずなのですが・・・ 再度の素早いご回答ありがとうございました。 またお手数おかけし、申し訳ありませんでした。 他のエラーが発生し、まだ結果は出ていませんが、もう一度確認します。 申し訳ありませんが、また何かありましたらお願いいたします。 誠にありがとうございました