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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PyTorch

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

Python

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

Q&A

0回答

1650閲覧

input batch_size と match target batch_size に関するエラー

tazaryu

総合スコア6

PyTorch

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

Python

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

0グッド

0クリップ

投稿2020/12/07 04:58

機械学習のコードを作成しており,入力xはshape=[1,64],yはshape=[1,6]です.for文内ではそれぞれxはshape[64],
yはshape=[6]になります.LogisticRegression(nn.Module)をモデルとして,作成したら損失の計算時にエラーが出ました.
サイズの大きさがあわないとのエラーなのでview関数を用いたのですが,直りませんでした.どなたか,ご教示の程,よろしくお願い致します.

###エラー文

Traceback (most recent call last): File "C:/Users/name/Desktop/myo-python-1.0.4/bindsnet-master/bindsnet/nextrsnn.py", line 101, in <module> loss = criterion(output.unsqueeze(0), y.unsqueeze(-1).long()) File "C:\Python36\lib\site-packages\torch\nn\modules\module.py", line 722, in _call_impl result = self.forward(*input, **kwargs) File "C:\Python36\lib\site-packages\torch\nn\modules\loss.py", line 948, in forward ignore_index=self.ignore_index, reduction=self.reduction) File "C:\Python36\lib\site-packages\torch\nn\functional.py", line 2422, in cross_entropy return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction) File "C:\Python36\lib\site-packages\torch\nn\functional.py", line 2216, in nll_loss .format(input.size(0), target.size(0))) ValueError: Expected input batch_size (1) to match target batch_size (6). Train progress: (500 / 500) Process finished with exit code 1

試したこと view(-1,6)

for

1 optimizer.zero_grad(); output = model(s.float()).view(-1,6) 2 loss = criterion(output.unsqueeze(0), y.unsqueeze(-1).long()) 3 loss.backward(); optimizer.step()

###コード

import

1import torch.nn as nn 2import numpy as np 3from bindsnet.network import Network 4from bindsnet.network.nodes import Input, LIFNodes 5from bindsnet.network.topology import Connection 6from bindsnet.network.monitors import Monitor 7 8# モデルの定義 9class LogisticRegression(nn.Module): 10 def __init__(self, input_size, num_classes): 11 super(LogisticRegression, self).__init__() 12 self.linear = nn.Linear(input_size, num_classes) 13 self.dropout = nn.Dropout(0.5) 14 15 def forward(self, x): 16 x = x.view(-1, 64) 17 return self.linear(x) 18 19# ネットワーク作成 20input_size = 64 21num_classes = 6 22time = 64 23network = Network(dt=1.0) 24_BATCH_SIZE = 300 25# ニューロンのレイヤー 5層作成 26inpt = Input(n=64, sum_input=True) 27middle = LIFNodes(n=40, trace=True, sum_input=True) 28center = LIFNodes(n=40, trace=True, sum_input=True) 29final = LIFNodes(n=40, trace=True, sum_input=True) 30out = LIFNodes(n=6, sum_input=True) 31 32# レイヤー同士の接続 33inpt_middle = Connection(source=inpt, target=middle, wmin=0, wmax=1e-1) 34middle_center = Connection(source=middle, target=center, wmin=0, wmax=1e-1) 35center_final = Connection(source=center, target=final, wmin=0, wmax=1e-1) 36final_out = Connection(source=final, target=out, wmin=0, wmax=1e-1) 37 38# 全てのレイヤー5層をネットワークに接続 39network.add_layer(inpt, name='A') 40network.add_layer(middle, name='B') 41network.add_layer(center, name='C') 42network.add_layer(final, name='D') 43network.add_layer(out, name='E') 44 45forward_connection = Connection(source=inpt, target=middle, w=0.05 + 0.1*torch.randn(inpt.n, middle.n)) 46network.add_connection(connection=forward_connection, source="A", target="B") 47forward_connection = Connection(source=middle, target=center, w=0.05 + 0.1*torch.randn(middle.n, center.n)) 48network.add_connection(connection=forward_connection, source="B", target="C") 49forward_connection = Connection(source=center, target=final, w=0.05 + 0.1*torch.randn(center.n, final.n)) 50network.add_connection(connection=forward_connection, source="C", target="D") 51forward_connection = Connection(source=final, target=out, w=0.05 + 0.1*torch.randn(final.n, out.n)) 52network.add_connection(connection=forward_connection, source="D", target="E") 53recurrent_connection = Connection(source=out, target=out, w=0.025*(torch.eye(out.n)-1),) 54network.add_connection(connection=recurrent_connection, source="E", target="E") 55 56# 入力と出力層だけMonitorを作成(電圧とスパイクを記録) 57inpt_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,) 58middle_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,) 59center_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,) 60final_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,) 61out_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,) 62 63# Monitorをネットワークに接続 64network.add_monitor(monitor=inpt_monitor, name="A") 65network.add_monitor(monitor=middle_monitor, name="B") 66network.add_monitor(monitor=center_monitor, name="C") 67network.add_monitor(monitor=final_monitor, name="D") 68network.add_monitor(monitor=out_monitor, name="E") 69 70for l in network.layers: 71 m = Monitor(network.layers[l], state_vars=['s'], time=time) 72 network.add_monitor(m, name=l) 73 74# トレーニングデータをロード  x = shape[1,64] y = [1,6] 75npzfile = np.load("C:/Users/name/Desktop/myo-python-1.0.4/myo-armband-nn-master/data/train_set.npz") 76x = npzfile['x'] 77y = npzfile['y'] 78 79# tensor型に変換 80x = torch.from_numpy(x).float() 81y = torch.from_numpy(y).float() 82 83training_pairs = [] 84for i, (x, y) in enumerate(zip(x.view(-1, 64), y)): 85 inputs = {'A': x.repeat(time, 1), 'E_b': torch.ones(time, 1)} 86 network.run(inputs=inputs, time=time) 87 training_pairs.append([network.monitors['E'].get('s').sum(-1), y]) 88 network.reset_state_variables() 89 90 if (i + 1) % 50 == 0: print('Train progress: (%d / 500)' % (i + 1)) 91 if (i + 1) == 500: print(); break 92 93model = LogisticRegression(input_size, num_classes); criterion = nn.CrossEntropyLoss() # m2に相当 94optimizer = torch.optim.SGD(model.parameters(), lr=0.1) 95# スパイクとラベルのトレーニング 96for epoch in range(6): 97 for i, (s, y) in enumerate(training_pairs): 98 optimizer.zero_grad(); output = model(s.float()).view(-1,6) 99 loss = criterion(output.unsqueeze(0), y.unsqueeze(-1).long()) **☚ここがエラー箇所です.** 100 loss.backward(); optimizer.step() 101 102test_pairs = [] 103for i, (x, y) in enumerate(zip(x.view(-1, 64), y)): 104 inputs = {'A': x.repeat(time, 1), 'E_b': torch.ones(time, 1)} 105 network.run(inputs=inputs, time=time) 106 test_pairs.append([network.monitors['E'].get('s').sum(-1), y]) 107 network.reset_state_variables() 108 109 if (i + 1) % 50 == 0: print('Test progress: (%d / 500)' % (i + 1)) 110 if (i + 1) == 500: print(); break 111 112correct, total = 0, 0 113for s, y in test_pairs: 114 output = model(s); _, predicted = torch.max(output.data.unsueeze(0), 1) 115 total += 1; correct += int(predicted == y.long()) 116 117print('Accuracy of logistic regression on 500 test examples: %2f %%\n ' % (100 * correct / total)) 118torch.save({ 119 'epoch': epoch, 120 'model_state_dict': model.state_dict(), 121 'optimizer_state_dict': optimizer.state_dict(), 122 'loss': loss, 123 }, "C:/Users/name/Desktop/myo-python-1.0.4/bindsnet-master/bindsnet/pytorchsession")

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問