繁体   English   中英

如何用numpy数据和批处理大小训练pytorch模型?

[英]How to train pytorch model with numpy data and batch size?

我正在学习pytorch的基础知识,并认为创建一个带有辍学的简单4层神经网络来训练IRIS数据集进行分类。 在参考了许多教程之后,我编写了这段代码。

import pandas as pd
from sklearn.datasets import load_iris
import torch
from torch.autograd import Variable

epochs=300
batch_size=20
lr=0.01

#loading data as numpy array
data = load_iris()
X=data.data
y=pd.get_dummies(data.target).values

#convert to tensor
X= Variable(torch.from_numpy(X), requires_grad=False)
y=Variable(torch.from_numpy(y), requires_grad=False)
print(X.size(),y.size())

#neural net model
model = torch.nn.Sequential(
    torch.nn.Linear(4, 10),
    torch.nn.ReLU(),
    torch.nn.Dropout(),
    torch.nn.Linear(10, 5),
    torch.nn.ReLU(),
    torch.nn.Dropout(),
    torch.nn.Linear(5, 3),
    torch.nn.Softmax()
)

print(model)

# Loss and Optimizer
optimizer = torch.optim.Adam(model.parameters(), lr=lr)  
loss_func = torch.nn.CrossEntropyLoss()  

for i in range(epochs):
    # Forward pass
    y_pred = model(X)

    # Compute and print loss.
    loss = loss_func(y_pred, y)
    print(i, loss.data[0])

    # Before the backward pass, use the optimizer object to zero all of the
    # gradients for the variables it will update (which are the learnable weights
    # of the model)
    optimizer.zero_grad()

    # Backward pass
    loss.backward()

    # Calling the step function on an Optimizer makes an update to its parameters
    optimizer.step()

我目前面临两个问题。

  1. 我想将批量大小设置为20 我应该怎么做?
  2. 在此步骤y_pred = model(X)它显示此错误

错误

 TypeError: addmm_ received an invalid combination of arguments - got (int, int, torch.DoubleTensor, torch.FloatTensor), but expected one of:
 * (torch.DoubleTensor mat1, torch.DoubleTensor mat2)
 * (torch.SparseDoubleTensor mat1, torch.DoubleTensor mat2)
 * (float beta, torch.DoubleTensor mat1, torch.DoubleTensor mat2)
 * (float alpha, torch.DoubleTensor mat1, torch.DoubleTensor mat2)
 * (float beta, torch.SparseDoubleTensor mat1, torch.DoubleTensor mat2)
 * (float alpha, torch.SparseDoubleTensor mat1, torch.DoubleTensor mat2)
 * (float beta, float alpha, torch.DoubleTensor mat1, torch.DoubleTensor mat2)
      didn't match because some of the arguments have invalid types: (int, int, torch.DoubleTensor, !torch.FloatTensor!)
 * (float beta, float alpha, torch.SparseDoubleTensor mat1, torch.DoubleTensor mat2)
      didn't match because some of the arguments have invalid types: (int, int, !torch.DoubleTensor!, !torch.FloatTensor!)

我想将批次大小设置为20。该怎么做?

对于数据处理和加载,PyTorch提供了两个类,一个是Dataset ,用于表示您的数据集。 具体来说, Dataset提供了使用样本索引从整个数据集中获取一个样本的接口。

但是Dataset还不够,对于大型数据集,我们需要进行批处理。 因此,PyTorch提供了第二类Dataloader ,用于在给定批次大小和其他参数的情况下从Dataset生成批次。

对于您的特定情况,我认为您应该尝试TensorDataset 然后使用Dataloader将批处理大小设置为20。只需查看PyTorch 官方示例,即可了解如何进行操作。

在此步骤y_pred = model(X),它显示此错误

该错误消息非常有用。 您输入模型的XDoubleTensor 但是您的模型参数的类型为FloatTensor 在PyTorch中,您无法在不同类型的张量之间进行操作。 您应该做的就是更换生产线

X= Variable(torch.from_numpy(X), requires_grad=False)

X= Variable(torch.from_numpy(X).float(), requires_grad=False)

现在, X类型为FloatTensor ,错误消息应该消失了。

另外,谨在此提醒您,Internet上有很多有关您的问题的资料可以充分解决您的问题。 您应该努力自己解决。

可能同一个问题: Pytorch:将FloatTensor转换为DoubleTensor

简而言之:从numpy转换时,值存储在DoubleTensor中,而优化器需要FloatTensor。 您必须更改其中之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM