gpt4 book ai didi

python - 如何使用 numpy 数据和批量大小训练 pytorch 模型?

转载 作者:行者123 更新时间:2023-12-03 22:22:11 24 4
gpt4 key购买 nike

我正在学习 pytorch 的基础知识,并想创建一个带有 dropout 的简单 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()

目前我面临两个问题。
  • 我想设置 20 的批量大小.我该怎么做?
  • 在这一步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!)

    最佳答案

    I want to set a batch size of 20. How should I do this?



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

    但是 Dataset还不够,对于大数据集,我们需要做批处理。所以 PyTorch 提供了第二类 Dataloader ,用于从 Dataset 生成批处理给定批量大小和其他参数。

    对于您的具体情况,我认为您应该尝试 TensorDataset .然后使用 Dataloader将批量大小设置为 20。只需查看 PyTorch official examples了解如何去做。

    At this step y_pred = model(X) its showing this error



    错误消息非常有用。您的意见 X模型是类型 DoubleTensor .但是您的模型参数的类型为 FloatTensor .在 PyTorch 中,您不能在不同类型的 Tensor 之间进行操作。你应该做的是更换线路
    X= Variable(torch.from_numpy(X), requires_grad=False)


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

    现在, X有类型 FloatTensor ,错误消息应该会消失。

    另外,作为一个温馨提示,互联网上有很多关于您的问题的 Material ,可以充分解决您的问题。你应该努力自己解决。

    关于python - 如何使用 numpy 数据和批量大小训练 pytorch 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46170814/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com