gpt4 book ai didi

python - Pytorch 运行时错误 : expected scalar type Float but found Byte

转载 作者:行者123 更新时间:2023-12-04 00:15:03 26 4
gpt4 key购买 nike

我正在研究带有数字的经典示例。我想创建我的第一个神经网络来预测数字图像 {0,1,2,3,4,5,6,7,8,9} 的标签。所以train.txt的第一列有标签,所有其他列是每个标签的特征。我定义了一个类来导入我的数据:

class DigitDataset(Dataset):
"""Digit dataset."""

def __init__(self, file_path, transform=None):
"""
Args:
csv_file (string): Path to the csv file with annotations.
root_dir (string): Directory with all the images.
transform (callable, optional): Optional transform to be applied
on a sample.
"""
self.data = pd.read_csv(file_path, header = None, sep =" ")
self.transform = transform

def __len__(self):
return len(self.data)

def __getitem__(self, idx):
if torch.is_tensor(idx):
idx = idx.tolist()

labels = self.data.iloc[idx,0]
images = self.data.iloc[idx,1:-1].values.astype(np.uint8).reshape((1,16,16))

if self.transform is not None:
sample = self.transform(sample)
return images, labels
然后我运行这些命令将我的数据集拆分为批次,以定义模型和损失:
train_dataset = DigitDataset("train.txt")
train_loader = DataLoader(train_dataset, batch_size=64,
shuffle=True, num_workers=4)

# Model creation with neural net Sequential model
model=nn.Sequential(nn.Linear(256, 128), # 1 layer:- 256 input 128 o/p
nn.ReLU(), # Defining Regular linear unit as activation
nn.Linear(128,64), # 2 Layer:- 128 Input and 64 O/p
nn.Tanh(), # Defining Regular linear unit as activation
nn.Linear(64,10), # 3 Layer:- 64 Input and 10 O/P as (0-9)
nn.LogSoftmax(dim=1) # Defining the log softmax to find the probablities
for the last output unit
)

# defining the negative log-likelihood loss for calculating loss
criterion = nn.NLLLoss()

images, labels = next(iter(train_loader))
images = images.view(images.shape[0], -1)

logps = model(images) #log probabilities
loss = criterion(logps, labels) #calculate the NLL-loss
我接受错误:
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-2-7f4160c1f086> in <module>
47 images = images.view(images.shape[0], -1)
48
---> 49 logps = model(images) #log probabilities
50 loss = criterion(logps, labels) #calculate the NLL-loss

~/anaconda3/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self,
*input, **kwargs)
725 result = self._slow_forward(*input, **kwargs)
726 else:
--> 727 result = self.forward(*input, **kwargs)
728 for hook in itertools.chain(
729 _global_forward_hooks.values(),

~/anaconda3/lib/python3.8/site-packages/torch/nn/modules/container.py in forward(self, input)
115 def forward(self, input):
116 for module in self:
--> 117 input = module(input)
118 return input
119

~/anaconda3/lib/python3.8/site-packages/torch/nn/modules/module.py in _call_impl(self,
*input, **kwargs)
725 result = self._slow_forward(*input, **kwargs)
726 else:
--> 727 result = self.forward(*input, **kwargs)
728 for hook in itertools.chain(
729 _global_forward_hooks.values(),

~/anaconda3/lib/python3.8/site-packages/torch/nn/modules/linear.py in forward(self, input)
91
92 def forward(self, input: Tensor) -> Tensor:
---> 93 return F.linear(input, self.weight, self.bias)
94
95 def extra_repr(self) -> str:

~/anaconda3/lib/python3.8/site-packages/torch/nn/functional.py in linear(input, weight, bias)
1688 if input.dim() == 2 and bias is not None:
1689 # fused op is marginally faster
-> 1690 ret = torch.addmm(bias, input, weight.t())
1691 else:
1692 output = input.matmul(weight.t())

RuntimeError: expected scalar type Float but found Byte
你知道有什么问题吗?感谢您的耐心和帮助!

最佳答案

这一行是你的错误的原因:

images = self.data.iloc[idx, 1:-1].values.astype(np.uint8).reshape((1, 16, 16))
imagesuint8 ( byte ) 而神经网络需要输入作为浮点数才能计算梯度(您不能使用整数计算反向传播的梯度,因为这些不是连续且不可微的)。
您可以使用 torchvision.transforms.functional.to_tensor将图像转换为 float并进入 [0, 1]像这样:
import torchvision

images = torchvision.transforms.functional.to_tensor(
self.data.iloc[idx, 1:-1].values.astype(np.uint8).reshape((1, 16, 16))
)
或者简单地除以 255将值放入 [0, 1] .

关于python - Pytorch 运行时错误 : expected scalar type Float but found Byte,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64635630/

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