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

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

新規登録して質問してみよう
ただいま回答率
85.35%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

2082閲覧

PyTorchによるCNNの実装方法(畳み込みニューラルネットワーク)

huskies

総合スコア2

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2021/05/28 08:17

編集2021/05/28 08:34

前提・実現したいこと

PyTorchを用いてCNN(畳み込みニューラルネットワーク)の実装を進めておりますが、CNNへの理解が乏しく上手く実装できておりません。

前提

  • Convolution Layerにはカーネルのサイズを width = 5, depth = 25を利用
  • ReLu活性化関数を利用
  • max-poolにはカーネルサイズを width = 2, stride = 2を利用
  • Flatten作業にてimageをvectorに変更
  • Fully-connected linearレイヤーには10個のアウトプットを生成

現状のエラーメッセージ

RuntimeError: shape '[-1, 4900]' is invalid for input of size 140000

なお、CNNネットワークは以下のtrain関数で学習させています。以下の通り、CNNを学習させる段階でエラーです。

def train(net, train_loader, test_loader, num_epochs=NUM_EPOCHS, learning_rate=LEARNING_RATE, compute_accs=False): criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate) train_accs = [] test_accs = [] for epoch in range(1, num_epochs + 1): batch_num = 1 for images, labels in train_loader: # If you are using a GPU, speed up computation by moving values to the GPU if torch.cuda.is_available(): net = net.cuda() images = images.cuda() labels = labels.cuda() optimizer.zero_grad() outputs = net(images) # CNNを学習させるこの段階でエラー loss = criterion(outputs, labels) loss.backward() optimizer.step()

該当のソースコード

python

1class NetC(nn.Module): 2 def __init__(self): 3 super(NetC, self).__init__() 4 self.relu = nn.ReLU() 5 self.conv1 = torch.nn.Conv2d(3, 25, kernel_size = (5, 25)) 6 self.pool = torch.nn.MaxPool2d(kernel_size = 2, stride = 2) 7 self.fc1 = torch.nn.Linear(25 * 14 * 14, 10) 8 9 def forward(self, x): 10 # pass dataframe into conv1 11 x = self.conv1(x) 12 print(x.shape) 13 # use relu function to x 14 x = self.relu(x) 15 # Run max pooling over x 16 x = self.pool(x) 17 print(x.shape) 18 # flatten x:おそらくここでエラー発生 19 x = x.view(-1, 25 * 14 * 14) 20 print(x.shape) 21 # pass into fully connected linear layer to 10 outputs 22 x = self.relu(self.fc1(x)) 23 24 return x

試したこと

おそらくflattenする際にx.view()を用いているこの点が間違っているのかと思います。PyTorchチュートリアルなどを見るとtorch.flattenを用いており、こちらの方が良さそうなのですが、まだ少々曖昧なためご教授いただければ幸いです。

また、その他の実装段階で前提条件に当てはまっていない箇所があればご指摘いただければと思います。

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

こちらがCNNのイメージ図です
イメージ説明

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

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

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

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

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

huskies

2021/05/29 00:45

ありがとうございます解決いたしました!資料も同時にありがたいです。
guest

回答1

0

ベストアンサー

畳み込みが5x5の正方形なら、
Conv2d(3, 25, kernel_size = (5, 25))
ではなく、
Conv2d(3, 25, kernel_size = (5, 5))
Conv2d(3, 25, kernel_size = 5)
のように書きます

参考
pyTorchのNetworkのパラメータの閲覧と書き換え

投稿2021/05/29 10:35

jbpb0

総合スコア7653

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問