初めに
以前質問させてもらってあるディレクトリから画像をとってきてlabelを付与するという
いわゆる自作データセットみたいなのができました。
次にしようと思ったことがモデルの作成です。条件としてはinitだったりfowardだったりで必ず作りたいです。
前提条件
以下にモデルを作成する前段階を状態を記します。
ディレクトリ構成
├─animal_dataset ├─train │ ├─cat(70枚くらい) │ └─dog(70枚くらい) └─val ├─cat(30枚くらい) └─dog(30枚くらい)
個の画像から0/1でのlabelを付与したdataset.py
以下のような形で画像(data)とlabelを紐づけ、出力しています。
python
1 transform = transforms.Compose([transforms.Resize((256, 256)), transforms.ToTensor()]) 2 train_dataset = MyDatasets("./animal_dataset", "train", transform) 3 train_dataloader = data.DataLoader(train_dataset, batch_size=32, shuffle= True) 4 5 for data, labels in train_dataloader: 6 print(data.shape, labels.shape) 7 datas, labels = iter(train_dataloader).next() 8 9 s=10 10 pic = transforms.ToPILImage(mode='RGB')(datas[s]) 11 pic.save('./result.jpg') 12 if labels[s].numpy() == 0: 13 print("label: cat") 14 else: 15 print("label: dog")
出力結果
画像dataとラベルlabelのサイズを出力しています。
torch.Size([32, 3, 256, 256]) torch.Size([32]) torch.Size([32, 3, 256, 256]) torch.Size([32]) torch.Size([32, 3, 256, 256]) torch.Size([32]) torch.Size([32, 3, 256, 256]) torch.Size([32]) torch.Size([1, 3, 256, 256]) torch.Size([1]) label: dog
書いてみたコード
これは以下を参照したモデルです。
モデルの書き方参照
class Net(nn.Module): def __init__(self): #親クラスのnn.Moduleのコンストラクタを呼ぶ super(Net,self).__init__() #畳み込み層を定義する #引数は順番に、サンプル数、チャネル数、フィルタのサイズ self.conv1=nn.Conv2d(1,6,(5,5)) #フィルタのサイズは正方形であればタプルではなく整数でも可(8行目と10行目は同じ意味) self.conv2=nn.Conv2d(6,16,5) #全結合層を定義する #fc1の第一引数は、チャネル数*最後のプーリング層の出力のマップのサイズ=特徴量の数 self.fc1=nn.Linear(16*5*5,120) self.fc2=nn.Linear(120,84) self.fc3=nn.Linear(84,10)
わかっていること
・元画像が256×256の正方形であること
・最終的に犬or猫(1 or 0)であることから最後のLinear(x,2)の2になるだろうと予想しています。
・プーリング層の意味や全結合などの意味は把握しているつもりです。
わからないこと(よろしくお願いします。)
modelの作成に際して
・torch.nn.Conv1dやtorch.nn.Conv2dの違いがわからないです。なのでconv2dを使う意図もわかっていません
・このコードを見た時にサンプル数とチャンネル数ってのがなんだかわかりません。何を入れたらいいのでしょうか。
・なのでサンプル数が1でチャンネルが6でフィルタのサイズが5なのでしょうか。どのようなきじゅんで決めるのか?という疑問があります。
・またどうして次のチャンネル数が16なのでしょうか
・conv2dだけでなくlinearの引数の数字にどのような値を入れたらいいのかわかりません。
自分の出力結果からどのような数字を入れるべきかアドバイスをくださいますでしょうか。
また、そもそもcnnでやろうとしているのが間違っていたり、足りない情報があればご指摘くださいませ。
追記いたします
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。