前提・実現したいこと
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()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/05 04:38
2021/05/05 04:40