質問するログイン新規登録

回答編集履歴

3

修正

2020/08/11 15:23

投稿

tiitoi
tiitoi

スコア21964

answer CHANGED
@@ -53,7 +53,7 @@
53
53
  self.transform = transform
54
54
  self.data = []
55
55
  self.labels = []
56
- name_to_label = {"dog": 0, "cat": 1}
56
+ name_to_label = {"cat": 0, "dog": 1}
57
57
 
58
58
  target_path_list = []
59
59
  target_dir = os.path.join(root_dir, key, "**/*")

2

修正

2020/08/11 15:23

投稿

tiitoi
tiitoi

スコア21964

answer CHANGED
@@ -35,4 +35,54 @@
35
35
  ```
36
36
 
37
37
  参考リンク ↓ ImageFolder を使った学習の例
38
- [Pytorch - 事前学習モデルを使ってクラス分類モデルを学習する方法 - pystyle](https://pystyle.info/pytorch-train-classification-problem-using-a-pretrained-model/)
38
+ [Pytorch - 事前学習モデルを使ってクラス分類モデルを学習する方法 - pystyle](https://pystyle.info/pytorch-train-classification-problem-using-a-pretrained-model/)
39
+
40
+ ## 追記
41
+
42
+ ```python
43
+ import glob
44
+ import os
45
+
46
+ from PIL import Image
47
+ from torch.utils import data as data
48
+ from torchvision import transforms as transforms
49
+
50
+
51
+ class MyDatasets(data.Dataset):
52
+ def __init__(self, root_dir, key, transform):
53
+ self.transform = transform
54
+ self.data = []
55
+ self.labels = []
56
+ name_to_label = {"dog": 0, "cat": 1}
57
+
58
+ target_path_list = []
59
+ target_dir = os.path.join(root_dir, key, "**/*")
60
+
61
+ for path in glob.glob(target_dir):
62
+ name = os.path.basename(os.path.dirname(path))
63
+ label = name_to_label[name]
64
+
65
+ self.data.append(path)
66
+ self.labels.append(label)
67
+
68
+ def __len__(self):
69
+ return len(self.data)
70
+
71
+ def __getitem__(self, index):
72
+ img_path = self.data[index]
73
+ label = self.labels[index]
74
+
75
+ img = Image.open(img_path).convert("RGB")
76
+
77
+ img = self.transform(img)
78
+
79
+ return img, label
80
+
81
+
82
+ transform = transforms.Compose([transforms.Resize((256, 256)), transforms.ToTensor()])
83
+ train_dataset = MyDatasets("/data/mydataset", "train", transform)
84
+ train_dataloader = data.DataLoader(train_dataset, batch_size=32)
85
+
86
+ for data, labels in train_dataloader:
87
+ print(data.shape, labels.shape)
88
+ ```

1

修正

2020/08/11 15:22

投稿

tiitoi
tiitoi

スコア21964

answer CHANGED
@@ -1,4 +1,18 @@
1
+ ## 質問のコードでエラーが起こっている原因
2
+
3
+ `train_dataset = MyDatasets()` で引数を指定していないので、`self.path` が None になっています。
4
+
5
+ それを以下で文字列と結合しようとして、None と str の結合はできないとエラーになっています。
6
+
7
+ ```python
8
+ target_path = os.path.join(self.path + self.key + '/**/*.jpg')
1
9
  ```
10
+
11
+
12
+
13
+ ## 提案
14
+
15
+ ```
2
16
  animal_dataset
3
17
  ├─train
4
18
  │ ├─cat(70枚くらい)