Open1
❣️PyTorch初心者❣️
DataLoaderまわり
- __init__はdataframe全部渡す
- 画像の正解ラベルとdataframeを変数に入れておく
- __getitem__は1つずつ画像をとってくる
- 入れた変数から画像名をよむ→cv2とかでimread
- ラベルは変数から直接よむ
- 最後に画像とラベルを返す
- 特にimreadするだけでよい(PILだとチャンネルの順序変える必要がある気がする)
https://qiita.com/mathlive/items/2a512831878b8018db02
トラブルシューティング
'list' object has no attribute 'to'
DataLoaderの中のlabelsを.valuesとかで入れているとlistになっていて、GPUを使うために.toをするとエラーになることがある。そんなときは、numpyにしてからPyTorch tesnsorにする。
torch.from_numpy(np.asarray(labels))
それでもだめなとき(labelがstringとか)は、
classes_map = {'c0':0,'c1':1,'c2':2,'c3':3,'c4':4,'c5':5,'c6':6,'c7':7,'c8':8,'c9':9}
train['classnameInt'] = train.classname.map(lambda x: classes_map[x])
こんな感じで文字から数値形の型にマップして、それをラベルとして使うとよさそう。