使用 PyTorch 进行矩阵乘法
Matrix Multiplication with PyTorch
如果这是一个基本问题,我很抱歉,但我是 Pytorch 的新手,并且一直在尝试执行线性回归。我已经在以下问题上停留了大约 3 个小时,并且尝试了所有方法,所以我希望你能提供帮助。
我想使用一组四个输入(学习时间、旅行时间、失败和缺勤)来预测成绩。对于我的输出,我有 3 次测试的成绩。数据集中有 395 名学生。
我已经在底部列出了我所有的代码,但我也会在这里粘贴相关部分:
到目前为止,我已经创建了输入和输出张量,并创建了矩阵乘法模型。这是我的代码:
w = torch.randn(395,4, requires_grad=True)
b = torch.randn(4, requires_grad=True)
print(w)
print(b)
def model(x):
return x @ w.t() + b
predictions = model(inputs)
print(predictions)
我知道这还不是线性回归,但我真的很难理解它的矩阵乘法方面。每当我 运行 打印(预测)代码时,我都会收到以下消息:
RuntimeError Traceback (most recent call last)
<ipython-input-277-c6db141153ac> in <module>
----> 1 preds = model(inputs)
2 print(preds)
<ipython-input-276-3b94bfbc599e> in model(x)
1 def model(x):
----> 2 return x @ w.t() + b
RuntimeError: Expected object of scalar type Double but got scalar type Float for argument #3 'mat2' in call to _th_addmm_out
我感觉 w 和 b 的数字是错误的 (395,4) 和 (4),但我不知道为什么或要将它们更改为什么。请问有没有人可以指出正确的方向?
提前致谢!
这是我的全部代码:
'''
import torch
import numpy as np
from numpy import genfromtxt
data = np.genfromtxt('student-mat.csv', delimiter=',',dtype=float)
data
travel_time = data[1:, 0:1]
study_time = data[1:, 1:2]
failures = data[1:, 2:3]
absenses = data[1:, 3:4]
grade_one = data[1:, 4:5]
grade_two = data[1:, 5:6]
grade_three = data[1:, 6:7]
data_input = data[1:, 0:4]
output = data[1:, 4:7]
inputs = torch.from_numpy(data_input)
outputs = torch.from_numpy(grade_one)
print(inputs)
print(grade_one)
w = torch.randn(395,4, requires_grad=True)
b = torch.randn(4, requires_grad=True)
print(w)
print(b)
def model(x):
return x @ w.t() + b
preds = model(inputs)
print(preds)
数据集 - https://archive.ics.uci.edu/ml/datasets/Student+Performance
错误消息说明了一切。涉及的张量包含不同数据类型的元素。默认情况下,w
和 b
具有 torch.float32
类型的元素,而 data_input
是具有 Python 默认浮点类型(即双精度)的 NumPy 数组。当您使用 from_numpy
转换时,该数据类型将被保留。尝试在 np.genfromtxt
调用中使用 dtype=np.float32
。
如果这是一个基本问题,我很抱歉,但我是 Pytorch 的新手,并且一直在尝试执行线性回归。我已经在以下问题上停留了大约 3 个小时,并且尝试了所有方法,所以我希望你能提供帮助。
我想使用一组四个输入(学习时间、旅行时间、失败和缺勤)来预测成绩。对于我的输出,我有 3 次测试的成绩。数据集中有 395 名学生。
我已经在底部列出了我所有的代码,但我也会在这里粘贴相关部分:
到目前为止,我已经创建了输入和输出张量,并创建了矩阵乘法模型。这是我的代码:
w = torch.randn(395,4, requires_grad=True)
b = torch.randn(4, requires_grad=True)
print(w)
print(b)
def model(x):
return x @ w.t() + b
predictions = model(inputs)
print(predictions)
我知道这还不是线性回归,但我真的很难理解它的矩阵乘法方面。每当我 运行 打印(预测)代码时,我都会收到以下消息:
RuntimeError Traceback (most recent call last)
<ipython-input-277-c6db141153ac> in <module>
----> 1 preds = model(inputs)
2 print(preds)
<ipython-input-276-3b94bfbc599e> in model(x)
1 def model(x):
----> 2 return x @ w.t() + b
RuntimeError: Expected object of scalar type Double but got scalar type Float for argument #3 'mat2' in call to _th_addmm_out
我感觉 w 和 b 的数字是错误的 (395,4) 和 (4),但我不知道为什么或要将它们更改为什么。请问有没有人可以指出正确的方向?
提前致谢!
这是我的全部代码:
'''
import torch
import numpy as np
from numpy import genfromtxt
data = np.genfromtxt('student-mat.csv', delimiter=',',dtype=float)
data
travel_time = data[1:, 0:1]
study_time = data[1:, 1:2]
failures = data[1:, 2:3]
absenses = data[1:, 3:4]
grade_one = data[1:, 4:5]
grade_two = data[1:, 5:6]
grade_three = data[1:, 6:7]
data_input = data[1:, 0:4]
output = data[1:, 4:7]
inputs = torch.from_numpy(data_input)
outputs = torch.from_numpy(grade_one)
print(inputs)
print(grade_one)
w = torch.randn(395,4, requires_grad=True)
b = torch.randn(4, requires_grad=True)
print(w)
print(b)
def model(x):
return x @ w.t() + b
preds = model(inputs)
print(preds)
数据集 - https://archive.ics.uci.edu/ml/datasets/Student+Performance
错误消息说明了一切。涉及的张量包含不同数据类型的元素。默认情况下,w
和 b
具有 torch.float32
类型的元素,而 data_input
是具有 Python 默认浮点类型(即双精度)的 NumPy 数组。当您使用 from_numpy
转换时,该数据类型将被保留。尝试在 np.genfromtxt
调用中使用 dtype=np.float32
。