我正试图修改这个来自的前馈网络https://github.com/yunjey/pytorch-tutorial/blob/master/tutorials/01-basics/feedforward_neural_network/main.py 使用我自己的数据集。
我定义了一个自定义数据集,其中两个1微米数组作为输入,两个标量对应的输出:
x = torch.tensor([[5.5, 3,3,4] , [1 , 2,3,4], [9 , 2,3,4]])
print(x)
y = torch.tensor([1,2,3])
print(y)
import torch.utils.data as data_utils
my_train = data_utils.TensorDataset(x, y)
my_train_loader = data_utils.DataLoader(my_train, batch_size=50, shuffle=True)
我已更新超参数以匹配新的输入大小(2)
我还改变了图像=images.reshape(-1,28*28). to(设备)
to图像=images.reshape(-1,4). to(设备)
由于训练集很小,我将批量大小更改为1。
在作出这些修改后,我收到错误时,试图训练:
在()51 52#Forward pass中的运行时错误回溯(最近一次调用last)---
/home/.local/lib/python3.6/site-packages/torch/nn/modules/module.py在调用(自我,*输入,**kwargs)489结果=自我。_slow_forward(*输入,**kwargs)490其他:-
前进档(自身,x)31 32 def前进档(自身,x):---
/home/.local/lib/python3.6/site-packages/torch/nn/modules/module.py在调用(自我,*输入,**kwargs)489结果=自我。_slow_forward(*输入,**kwargs)490其他:-
/主页/。local/lib/python3。6/现场包/火炬/nn/模块/线性。py前进档(自身,输入)53 54 def前进档(自身,输入):---
/home/.local/lib/python3.6/site-packages/torch/nn/functional.py线性(输入,重量,偏置)990如果input.dim () == 2和偏置不是无: 991#融合的运算稍微快一点-
运行时错误:大小不匹配,m1:[3 x 4],m2:[2 x 3]at/pytorch/aten/src/THC/generic/THCTensorMathBlas。cu:249
如何修改代码以匹配预期的维度?我不确定要更改什么代码,因为我已经更改了所有需要更新的参数?
变更前的来源:
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
# Device configuration
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# Hyper-parameters
input_size = 784
hidden_size = 500
num_classes = 10
num_epochs = 5
batch_size = 100
learning_rate = 0.001
# MNIST dataset
train_dataset = torchvision.datasets.MNIST(root='../../data',
train=True,
transform=transforms.ToTensor(),
download=True)
test_dataset = torchvision.datasets.MNIST(root='../../data',
train=False,
transform=transforms.ToTensor())
# Data loader
train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
batch_size=batch_size,
shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset,
batch_size=batch_size,
shuffle=False)
# Fully connected neural network with one hidden layer
class NeuralNet(nn.Module):
def __init__(self, input_size, hidden_size, num_classes):
super(NeuralNet, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, num_classes)
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
return out
model = NeuralNet(input_size, hidden_size, num_classes).to(device)
# Loss and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
# Train the model
total_step = len(train_loader)
for epoch in range(num_epochs):
for i, (images, labels) in enumerate(train_loader):
# Move tensors to the configured device
images = images.reshape(-1, 28*28).to(device)
labels = labels.to(device)
# Forward pass
outputs = model(images)
loss = criterion(outputs, labels)
# Backward and optimize
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (i+1) % 100 == 0:
print ('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'
.format(epoch+1, num_epochs, i+1, total_step, loss.item()))
# Test the model
# In test phase, we don't need to compute gradients (for memory efficiency)
with torch.no_grad():
correct = 0
total = 0
for images, labels in test_loader:
images = images.reshape(-1, 28*28).to(device)
labels = labels.to(device)
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 10000 test images: {} %'.format(100 * correct / total))
# Save the model checkpoint
torch.save(model.state_dict(), 'model.ckpt')
源帖子更改:
x = torch.tensor([[5.5, 3,3,4] , [1 , 2,3,4], [9 , 2,3,4]])
print(x)
y = torch.tensor([1,2,3])
print(y)
import torch.utils.data as data_utils
my_train = data_utils.TensorDataset(x, y)
my_train_loader = data_utils.DataLoader(my_train, batch_size=50, shuffle=True)
print(my_train)
print(my_train_loader)
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
# Device configuration
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# Hyper-parameters
input_size = 2
hidden_size = 3
num_classes = 3
num_epochs = 5
batch_size = 1
learning_rate = 0.001
# MNIST dataset
train_dataset = my_train
# Data loader
train_loader = my_train_loader
# Fully connected neural network with one hidden layer
class NeuralNet(nn.Module):
def __init__(self, input_size, hidden_size, num_classes):
super(NeuralNet, self).__init__()
self.fc1 = nn.Linear(input_size, hidden_size)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_size, num_classes)
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
return out
model = NeuralNet(input_size, hidden_size, num_classes).to(device)
# Loss and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
# Train the model
total_step = len(train_loader)
for epoch in range(num_epochs):
for i, (images, labels) in enumerate(train_loader):
# Move tensors to the configured device
images = images.reshape(-1, 4).to(device)
labels = labels.to(device)
# Forward pass
outputs = model(images)
loss = criterion(outputs, labels)
# Backward and optimize
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (i+1) % 100 == 0:
print ('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'
.format(epoch+1, num_epochs, i+1, total_step, loss.item()))
# Test the model
# In test phase, we don't need to compute gradients (for memory efficiency)
with torch.no_grad():
correct = 0
total = 0
for images, labels in test_loader:
images = images.reshape(-1, 4).to(device)
labels = labels.to(device)
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 10000 test images: {} %'.format(100 * correct / total))
# Save the model checkpoint
torch.save(model.state_dict(), 'model.ckpt')
您需要将input_size
更改为4(2*2),而不是修改后的代码当前显示的2
如果将其与原始MNIST示例进行比较,您将看到input\u size
设置为784(28*28),而不仅仅是28。
本文向大家介绍Pytorch 实现数据集自定义读取,包括了Pytorch 实现数据集自定义读取的使用技巧和注意事项,需要的朋友参考一下 以读取VOC2012语义分割数据集为例,具体见代码注释: VocDataset.py Train.py 以上这篇Pytorch 实现数据集自定义读取就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
本文向大家介绍pytorch 自定义数据集加载方法,包括了pytorch 自定义数据集加载方法的使用技巧和注意事项,需要的朋友参考一下 pytorch 官网给出的例子中都是使用了已经定义好的特殊数据集接口来加载数据,而且其使用的数据都是官方给出的数据。如果我们有自己收集的数据集,如何用来训练网络呢?此时需要我们自己定义好数据处理接口。幸运的是pytroch给出了一个数据集接口类(torch.uti
问题内容: 如何利用和自己的数据(而不仅仅是)? 有没有一种方法可以使用它们用于任何数据集的内置方法? 问题答案: 是的,那是可能的。只需自己创建对象,例如 其中,和是张量。必须为2D,即矩阵,其中每行代表一个训练样本,并且可以为1D或2D,具体取决于您要预测标量还是矢量。 希望有帮助! 编辑 :对@sarthak的问题的答复 基本上是。如果您创建了类型的对象,则构造函数将调查特征张量(实际上称为
http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/repositories.html Spring Data的MongoTemplate和MongoRepository有什么区别? 我这样做是因为我需要使用MongoTemplate进行特殊查询。 这里也描述了这个问题,但解决方案似
本文向大家介绍pytorch中的自定义数据处理详解,包括了pytorch中的自定义数据处理详解的使用技巧和注意事项,需要的朋友参考一下 pytorch在数据中采用Dataset的数据保存方式,需要继承data.Dataset类,如果需要自己处理数据的话,需要实现两个基本方法。 :.getitem:返回一条数据或者一个样本,obj[index] = obj.getitem(index). :.len
本文向大家介绍layui实现数据表格自定义数据项,包括了layui实现数据表格自定义数据项的使用技巧和注意事项,需要的朋友参考一下 layui是一个很适合后台开发人员用的一个前端框架,界面简洁,功能丰富。 大家知道,系统一般都有数据表格及分页功能,尤其在后台管理系统之类,这类场景更是很多,layui也为我们提供了对应的支持,我这里要说的是,layui对异步返回的数据默认是有一套格式的,像下面这样