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

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

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

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

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

Q&A

1回答

4461閲覧

pytorchで機械学習を行いたいが、RuntimeError: mat1 and mat2 shapes cannot be multiplied (120x4 and 8x9)が出ます。

taiyo.

総合スコア2

PyTorch

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

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

0グッド

0クリップ

投稿2021/05/05 02:58

編集2021/05/05 04:39

前提・実現したいこと

ANNを使って、機械学習を行いたいデす

エラー内容は、1204,89,が適さないらしいです。
120,4は、X_trainのmetrixで、
8,9は、modelのhidden layer(parameter)のところです。
イマイチ、なにが、間違ってるのかわかりかねます。
もしわかる方いれば、ご教示してもらえると幸いです。すぐに、返信します。

shapeのエラーではないので、内容は表示しないです。

イメージ説明
イメージ説明

発生している問題・エラーメッセージ

RuntimeError: mat1 and mat2 shapes cannot be multiplied (120x4 and 8x9)

該当のソースコード

import torch import torch.nn as nn import torch.nn.functional as F from torch.utils.data import Dataset, DataLoader from sklearn.model_selection import train_test_split import pandas as pd import matplotlib.pyplot as plt %matplotlib inline class Model(nn.Module): def __init__(self, in_features=4, h1=8, h2=9,out_features=3): super().__init__() self.fc1 = nn.Linear(in_features, h1) self.fc1 = nn.Linear(h1,h2) self.out = nn.Linear(h2,in_features) def forward(self,x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = F.self.out(x) return x torch.manual_seed(32) model=Model() df = pd.read_csv('../Data/iris.csv') df.head() X = X = df.drop('target',axis=1).values y = df['target'].values X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=33) X_train = torch.FloatTensor(X_train) X_test = torch.FloatTensor(X_test) # y_train = F.one_hot(torch.LongTensor(y_train)) # not needed with Cross Entropy Loss # y_test = F.one_hot(torch.LongTensor(y_test)) y_train = torch.LongTensor(y_train) y_test = torch.LongTensor(y_test) criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(),lr=0.01) model.parameters() epochs = 100 lossses = [] for i in range(epochs): i+=1 y_pred = model.forward(X_train) loss = criterion(y_test, y_pred) losses.append(loss) if i%10 == 1: print(f'epoch: {i:2} loss:{loss.item():10.8f}') optimizer.zero_grad() loss.backward() optimizer.step()

試したこと

1,値を、色々変えてみましたが、同じ結果です。
2,RuntimeError: mat1 and mat2 shapes cannot be multiplied (120x4 and 8x9)をググってみましたが、CNNを使った方が、いて、サイズが合わないってあったのですが、これは、ANNなので、すこし、味が、違った気がします。

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

mac/latest,jupyter/latest

BEST REGARDS.

イメージ説明

変更後

import torch import torch.nn as nn import torch.nn.functional as F from torch.utils.data import Dataset, DataLoader from sklearn.model_selection import train_test_split import pandas as pd import matplotlib.pyplot as plt %matplotlib inline class Model(nn.Module): def __init__(self, in_features=4, h1=8, h2=9,out_features=3): super().__init__() self.fc1 = nn.Linear(in_features, h1) self.fc2 = nn.Linear(h1,h2) self.out = nn.Linear(h2,in_features) def forward(self,x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.out(x) return x torch.manual_seed(32) model=Model() df = pd.read_csv('../Data/iris.csv') df.head() X = X = df.drop('target',axis=1).values y = df['target'].values X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=33) X_train = torch.FloatTensor(X_train) X_test = torch.FloatTensor(X_test) # y_train = F.one_hot(torch.LongTensor(y_train)) # not needed with Cross Entropy Loss # y_test = F.one_hot(torch.LongTensor(y_test)) y_train = torch.LongTensor(y_train) y_test = torch.LongTensor(y_test) criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(),lr=0.01) model.parameters() epochs = 100 lossses = [] for i in range(epochs): i+=1 y_pred = model.forward(X_train) loss = criterion(y_test, y_pred) losses.append(loss) if i%10 == 1: print(f'epoch: {i:2} loss:{loss.item():10.8f}') optimizer.zero_grad() loss.backward() optimizer.step()

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

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

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

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

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

guest

回答1

0

行列A, Bの掛け算はAが m x n のサイズのとき、Bは n x k とならないといけません
エラーを見る限りAのサイズが 120 x 4 になっているので 8 x 9 の行列とは掛け合わせられないとでています

self.fc1 = nn.Linear(in_features, h1) self.fc1 = nn.Linear(h1,h2)

二行目がfc1を上書きしているのでこれをfc2に直せばいいんじゃないでしょうか

投稿2021/05/05 03:11

jamjam3

総合スコア165

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

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

taiyo.

2021/05/05 04:38

初歩的なミスで、すいません、直したら、他のエラーが出ました。追加します。
taiyo.

2021/05/05 04:40

self.outも、Fがいらなかったので、消しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問