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

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

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

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

Python

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

受付中

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

tazaryu
tazaryu

総合スコア0

PyTorch

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

Python

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

0回答

0評価

0クリップ

7閲覧

投稿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

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

###コード

import

import torch.nn as nn import numpy as np from bindsnet.network import Network from bindsnet.network.nodes import Input, LIFNodes from bindsnet.network.topology import Connection from bindsnet.network.monitors import Monitor # モデルの定義 class LogisticRegression(nn.Module): def __init__(self, input_size, num_classes): super(LogisticRegression, self).__init__() self.linear = nn.Linear(input_size, num_classes) self.dropout = nn.Dropout(0.5) def forward(self, x): x = x.view(-1, 64) return self.linear(x) # ネットワーク作成 input_size = 64 num_classes = 6 time = 64 network = Network(dt=1.0) _BATCH_SIZE = 300 # ニューロンのレイヤー 5層作成 inpt = Input(n=64, sum_input=True) middle = LIFNodes(n=40, trace=True, sum_input=True) center = LIFNodes(n=40, trace=True, sum_input=True) final = LIFNodes(n=40, trace=True, sum_input=True) out = LIFNodes(n=6, sum_input=True) # レイヤー同士の接続 inpt_middle = Connection(source=inpt, target=middle, wmin=0, wmax=1e-1) middle_center = Connection(source=middle, target=center, wmin=0, wmax=1e-1) center_final = Connection(source=center, target=final, wmin=0, wmax=1e-1) final_out = Connection(source=final, target=out, wmin=0, wmax=1e-1) # 全てのレイヤー5層をネットワークに接続 network.add_layer(inpt, name='A') network.add_layer(middle, name='B') network.add_layer(center, name='C') network.add_layer(final, name='D') network.add_layer(out, name='E') forward_connection = Connection(source=inpt, target=middle, w=0.05 + 0.1*torch.randn(inpt.n, middle.n)) network.add_connection(connection=forward_connection, source="A", target="B") forward_connection = Connection(source=middle, target=center, w=0.05 + 0.1*torch.randn(middle.n, center.n)) network.add_connection(connection=forward_connection, source="B", target="C") forward_connection = Connection(source=center, target=final, w=0.05 + 0.1*torch.randn(center.n, final.n)) network.add_connection(connection=forward_connection, source="C", target="D") forward_connection = Connection(source=final, target=out, w=0.05 + 0.1*torch.randn(final.n, out.n)) network.add_connection(connection=forward_connection, source="D", target="E") recurrent_connection = Connection(source=out, target=out, w=0.025*(torch.eye(out.n)-1),) network.add_connection(connection=recurrent_connection, source="E", target="E") # 入力と出力層だけMonitorを作成(電圧とスパイクを記録) inpt_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,) middle_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,) center_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,) final_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,) out_monitor = Monitor(obj=inpt, state_vars=("s", "v"), time=500,) # Monitorをネットワークに接続 network.add_monitor(monitor=inpt_monitor, name="A") network.add_monitor(monitor=middle_monitor, name="B") network.add_monitor(monitor=center_monitor, name="C") network.add_monitor(monitor=final_monitor, name="D") network.add_monitor(monitor=out_monitor, name="E") for l in network.layers: m = Monitor(network.layers[l], state_vars=['s'], time=time) network.add_monitor(m, name=l) # トレーニングデータをロード  x = shape[1,64] y = [1,6] npzfile = np.load("C:/Users/name/Desktop/myo-python-1.0.4/myo-armband-nn-master/data/train_set.npz") x = npzfile['x'] y = npzfile['y'] # tensor型に変換 x = torch.from_numpy(x).float() y = torch.from_numpy(y).float() training_pairs = [] for i, (x, y) in enumerate(zip(x.view(-1, 64), y)): inputs = {'A': x.repeat(time, 1), 'E_b': torch.ones(time, 1)} network.run(inputs=inputs, time=time) training_pairs.append([network.monitors['E'].get('s').sum(-1), y]) network.reset_state_variables() if (i + 1) % 50 == 0: print('Train progress: (%d / 500)' % (i + 1)) if (i + 1) == 500: print(); break model = LogisticRegression(input_size, num_classes); criterion = nn.CrossEntropyLoss() # m2に相当 optimizer = torch.optim.SGD(model.parameters(), lr=0.1) # スパイクとラベルのトレーニング for epoch in range(6): for i, (s, y) in enumerate(training_pairs): optimizer.zero_grad(); output = model(s.float()).view(-1,6) loss = criterion(output.unsqueeze(0), y.unsqueeze(-1).long()) **☚ここがエラー箇所です.** loss.backward(); optimizer.step() test_pairs = [] for i, (x, y) in enumerate(zip(x.view(-1, 64), y)): inputs = {'A': x.repeat(time, 1), 'E_b': torch.ones(time, 1)} network.run(inputs=inputs, time=time) test_pairs.append([network.monitors['E'].get('s').sum(-1), y]) network.reset_state_variables() if (i + 1) % 50 == 0: print('Test progress: (%d / 500)' % (i + 1)) if (i + 1) == 500: print(); break correct, total = 0, 0 for s, y in test_pairs: output = model(s); _, predicted = torch.max(output.data.unsueeze(0), 1) total += 1; correct += int(predicted == y.long()) print('Accuracy of logistic regression on 500 test examples: %2f %%\n ' % (100 * correct / total)) torch.save({ 'epoch': epoch, 'model_state_dict': model.state_dict(), 'optimizer_state_dict': optimizer.state_dict(), 'loss': loss, }, "C:/Users/name/Desktop/myo-python-1.0.4/bindsnet-master/bindsnet/pytorchsession")

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PyTorch

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

Python

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