微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用PyTorch进行矩阵乘法

如何解决使用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)

我知道这还不是线性回归,但是我真的在它的矩阵乘法方面苦苦挣扎。每当我运行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,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

解决方法

错误消息说明了一切。所涉及的张量包含不同数据类型的元素。默认情况下,wb的元素类型为torch.float32,而data_input是带有Python默认浮点类型(即double)的NumPy数组。当您使用from_numpy进行转换时,将保留该数据类型。尝试在dtype=np.float32通话中使用np.genfromtxt

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。