- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 pyTorch 中训练我的第一个神经网络(我不是程序员,只是一个困惑的化学家)。
网络本身应该采用 1064 个元素向量并用 float 对它们进行评级。
到目前为止,我遇到了各种各样的错误,从“float instead of long”到“Target 1 is out of bounds”。因此,我重新定义了数据类型,更正了输入向量的维度,更改了损失函数,现在我陷入了更正当前错误让我回到之前错误的情况。
这是:
ValueError: Target size (torch.Size([1000])) must be the same as input size (torch.Size([1000, 1]))
在 'loss=loss_calc(outputs, target)'
行。
我尝试在 DataSet 类定义期间取消压缩标签,但这个解决方案让我退缩了。当我尝试 label = label.view(1,1)
时,结果错误更改为
Target size (torch.Size([1000, 1, 1])) must be the same as input size (torch.Size([1000, 1]))
谁能帮我解决这个问题?
import pandas as pd
import numpy as np
import rdkit
from rdkit import Chem
from rdkit.Chem import AllChem
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
class dataset(Dataset):
def __init__(self, path, transform=None):
self.data = pd.read_excel(path)
self.transform = transform
def __len__(self):
return len(self.data)
def __getitem__(self, index):
smiles=self.data.at[index, 'smiles']
mol=Chem.MolFromSmiles(smiles)
morgan = torch.tensor(list(AllChem.GetMorganFingerprintAsBitVect(mol, 1, nBits=1064)), dtype=torch.float)
label=torch.tensor(self.data.at[index, 'score'], dtype=torch.long)
if self.transform is not None:
morgan=self.transform(morgan)
return morgan, label
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(1064, 1064)
self.fc2 = nn.Linear(1064, 1)
self.act = nn.Tanh()
def forward(self, x):
x = self.act(self.fc1(x))
x = self.act(self.fc2(x))
x = self.fc2(x)
return x
trainSet=dataset(r'C:\Users\BajMic\Peptides\trainingSet.xlsx')
testSet=dataset(r'C:\Users\BajMic\Peptides\testSet.xlsx')
net = Net()
loss_calc = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
for epoch in range(2):
running_loss=0.0
for data in DataLoader(trainSet, batch_size=1000, shuffle=True):
inputs, target = data
optimizer.zero_grad()
outputs = net(inputs)
print(outputs)
loss = loss_calc(outputs, target)
loss.backward()
optimizer.step() # print statistics
running_loss += loss.item()
print('[%d, %5d] loss: %.3f' %(epoch + 1, i + 1, running_loss))
running_loss = 0.0
print('Finished Training')
最佳答案
当使用损失函数并遇到形状问题时,您通常会收到此类错误消息:
Target size (torch.Size([...])) must be the same as input size (torch.Size([...]))
“目标” 指的是标签,即基本事实,而 “输入” 指的是模型的输出。在这种情况下,输出是 1 个标量值的 1000 个预测(您设置 batch_size=1000
)。因此形状是 (1000, 1)
。最后一个轴是困扰您的轴,因为预测向量只是一个包含 1000 个标量的一维张量,即 (1000)
。
要解决这个问题,您可以使用额外的维度扩展目标张量。用torch.unsqueeze()
:
target = target.unsqueeze(-1) # -1 stands for last here equivalent to 1
关于neural-network - ValueError : Target size (torch. Size([1000])) must be the same as input size (torch.Size([1000, 1])),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65537991/
我想向 Torch 添加一个损失函数,用于计算预测值和目标值之间的编辑距离。 有没有一种简单的方法来实现这个想法? 还是我必须编写自己的具有向后和向前功能的类? 最佳答案 如果您的标准可以表示为现有模
我如何沿着 torch 中的列求和?我有一个 128*1024 的张量,我想通过对所有行求和得到一个 1*1024 的张量。 例如:一个: 1 2 3 4 5 6 我想要b 5 7 9 最佳答案 为此
阅读pytorch文档后,我仍然需要帮助来理解torch.mm、torch.matmul和torch.mul之间的区别.由于我不完全理解它们,我无法简明扼要地解释这一点。 B = torch.tens
minibatch = torch.Tensor(5, 2, 3,5) m = nn.View(-1):setNumInputDims(1) m:forward(minibatch) 给出一个大小
有两个 PyTorch 存储库: https://github.com/hughperkins/pytorch https://github.com/pytorch/pytorch 第一个显然需要 T
晚上好, 我刚刚安装了 PyTorch 0.4.0,我正在尝试执行第一个教程“什么是 PyTorch?” 我编写了一个 Tutorial.py 文件,我尝试使用 Visual Studio Code
我有一个浮点值列表(或一个 numpy 数组)。我想创建一个包含所有这些值的一维 torch 张量。我可以创建 torch 张量并运行循环来存储值。 但我想知道有没有什么办法,我可以使用列表或数组中的
这是我在将 convertinf DQN 转换为 Double DQN 来解决 cartpole 问题时遇到的问题。我快要弄清楚了。 tensor([0.1205, 0.1207, 0.1197, 0
鉴于: x_batch = torch.tensor([[-0.3, -0.7], [0.3, 0.7], [1.1, -0.7], [-1.1, 0.7]]) 然后申请 torch.sigmoid(
我正在学习一门类(class),该类(class)使用已弃用的 PyTorch 版本,该版本不会根据需要将 torch.int64 更改为 torch.LongTensor。当前引发错误的代码部分是:
我正在尝试从 this repo 运行代码.我通过将 main.py 中的第 39/40 行从更改为禁用了 cuda parser.add_argument('--type', default='to
从 0.4.0 版本开始,可以使用 torch.tensor 和 torch.Tensor 有什么区别?提供这两个非常相似且令人困惑的替代方案的原因是什么? 最佳答案 在 PyTorch 中,torc
用于强化学习的 OpenAI REINFORCE 和 actor-critic 示例具有以下代码: REINFORCE : policy_loss = torch.cat(policy_loss).s
我在装有 CentOS Linux 7.3.1611(核心)操作系统的计算机上使用 Python 3.5.1。 我正在尝试使用 PyTorch 并开始使用 this tutorial . 不幸的是,示
我正在尝试使用 torch.load 加载预训练模型。 我收到以下错误: ModuleNotFoundError: No module named 'utils' 我已通过从命令行打开它来检查我使用的
这篇文章与我之前的 How to define a Python Class which uses R code, but called from rTorch? 有关. 我在 R ( https:/
是否torch.manual_seed包括torch.cuda.manual_seed_all的操作? 如果是,我们可以使用 torch.manual_seed设置种子。否则我们应该调用这两个函数。
我们可以使用 torch.Tensor([1., 2.], device='cuda') 在 GPU 上分配张量.使用这种方式而不是torch.cuda.Tensor([1., 2.])有什么不同吗?
我正在尝试深入了解 PyTorch 张量内存模型的工作原理。 # input numpy array In [91]: arr = np.arange(10, dtype=float32).resha
我同时安装了 python38,37 和 anaconda,操作系统 - win10,x64。 我无法在 py38,37 中安装 torch - 但在 anaconda 中安装了它。 系统环境变量“路
我是一名优秀的程序员,十分优秀!