我是人工智能新手,并且已经按照一个教程构建了一个机器学习器,它可以预测冠军赛的得分。我已经完成了教程,但是当我运行代码时,我得到一个运行时错误,它只是说mat1和mat2形状不能相乘。我看了所有的代码,似乎找不到问题。有人知道为什么会出现这个错误吗?这是程序的代码:
import pandas
import torch
import matplotlib.pyplot as plt
import numpy as np
filepath = "2010_training.csv"
df = pandas.read_csv(filepath)
extract = [5, 6, 7, 8, 9, 10, 13, 14, 16, 17, 18, 20, 21, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 35,
36, 37, 38, 47, 48, 49]
df = df.iloc[:, extract]
training = df.iloc[:-20]
test = df.iloc[-20:]
for e in range(len(training.columns) - 3):
num = max(training.iloc[:, e].max(), test.iloc[:, e].max())
if num < 10:
training.iloc[:, e] /=10
test.iloc[:, e] /=10
elif num < 100:
training.iloc[:, e] /=100
test.iloc[:, e] /=100
elif num < 1000:
training.iloc[:, e] /= 1000
test.iloc[:, e] /=1000
else:
print("Error in normalisation! Please check!")
training = training.sample(frac=1)
test = test.sample(frac=1)
training_input = training.iloc[:, -3:]
training_output = training.iloc[:, -3:]
test_input = test.iloc[:, :-3]
test_output = test.iloc[:, -3:]
def convert_output_win(source):
target = source.copy()
target['new'] = 2
for i, rows in target.iterrows():
if rows['win'] == 1:
rows['new'] = 1
if rows['draw'] == 1:
rows['new'] = 0
if rows['defeat'] == 1:
rows['new'] = 0
return target.iloc[:, -1]
training_output = convert_output_win(training_output)
test_output = convert_output_win(test_output)
class Net(torch.nn.Module):
def __init__(self, input_size, hidden_size):
super(Net, self).__init__()
self.input_size = input_size
self.hidden_size = hidden_size
self.fc1 = torch.nn.Linear(self.input_size, self.hidden_size)
self.relu = torch.nn.ReLU()
self.fc2 = torch.nn.Linear(self.hidden_size, 1)
self.sigmoid = torch.nn.Sigmoid()
def forward(self, x):
hidden = self.fc1(x)
relu = self.relu(hidden)
output = self.fc2(relu)
output = self.sigmoid(output)
return output
training_input = torch.FloatTensor(training_input.values)
training_output = torch.FloatTensor(training_output.values)
test_input = torch.FloatTensor(test_input.values)
test_output = torch.FloatTensor(test_output.values)
input_size = training_input.size()[1]
hidden_size = 30
model = Net(input_size, hidden_size)
criterion = torch.nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr = 0.9, momentum=0.2)
model.eval()
y_pred = model(test_input)
before_train = criterion(y_pred.squeeze(), test_output)
print('Test loss before training', before_train.item())
model.train()
epochs = 5000
errors = []
for epoch in range(epochs):
optimizer.zero_grad()
y_pred = model(training_input)
loss = criterion(y_pred.squeeze(), training_output)
errors.append(loss.item())
print('Epoch {}: train loss: {}'.format(epoch, loss.item()))
loss.backward
optimizer.step()
model.eval()
y_pred = model(test_input)
after_train = criterion(y_pred.squeeze(), test_output)
print('Test loss after Training', after_train.item())
def plotcharts(errors):
errors = np.array(errors)
plt.figure(figsize=(12, 5))
graf02 = plt.subplot(1, 2, 1)
graf02.set_title('Errors')
plt.plot(errors, '-')
plt.xlabel('Epochs')
graf03 = plt.subplot(1, 2, 2)
graf03.set_title('Tests')
a = plt.plot(test_output.numpy(), 'yo', label='Real')
plt.setp(a, markersize=10)
a = plt.plot(y_pred.detach().numpy(), 'b+', label='Predicted')
plt.setp(a, markersize=10)
plt.legend(loc=7)
plt.show()
plotcharts(errors)
目前没有回答
相关问题 更多 >
编程相关推荐