我正在尝试使用预先训练的模型。这就是问题发生的地方
模型不是应该接收简单的彩色图像吗?为什么它需要 4 维输入?
RuntimeError Traceback (most recent call last)
<ipython-input-51-d7abe3ef1355> in <module>()
33
34 # Forward pass the data through the model
---> 35 output = model(data)
36 init_pred = output.max(1, keepdim=True)[1] # get the index of the max log-probability
37
5 frames
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/conv.py in forward(self, input)
336 _pair(0), self.dilation, self.groups)
337 return F.conv2d(input, self.weight, self.bias, self.stride,
--> 338 self.padding, self.dilation, self.groups)
339
340
RuntimeError: Expected 4-dimensional input for 4-dimensional weight 32 3 3, but got 3-dimensional input of …Run Code Online (Sandbox Code Playgroud) machine-learning computer-vision conv-neural-network pytorch torchvision
我试图了解 torchvision 如何与 mathplotlib 交互以生成图像网格。生成图像并以迭代方式显示它们很容易:
import torch
import torchvision
import matplotlib.pyplot as plt
w = torch.randn(10,3,640,640)
for i in range (0,10):
z = w[i]
plt.imshow(z.permute(1,2,0))
plt.show()
Run Code Online (Sandbox Code Playgroud)
然而,在网格中显示这些图像似乎并不那么简单。
w = torch.randn(10,3,640,640)
grid = torchvision.utils.make_grid(w, nrow=5)
plt.imshow(grid)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-61-1601915e10f3> in <module>()
1 w = torch.randn(10,3,640,640)
2 grid = torchvision.utils.make_grid(w, nrow=5)
----> 3 plt.imshow(grid)
/anaconda3/lib/python3.6/site-packages/matplotlib/pyplot.py in imshow(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, hold, data, **kwargs)
3203 filternorm=filternorm, …Run Code Online (Sandbox Code Playgroud) 我正在为包含许多图像对的数据集编写一个简单的转换。作为数据增强,我想对每一对应用一些随机变换,但该对中的图像应该以相同的方式进行变换。\n例如,给定一对两个图像A和B,如果A水平翻转,则B必须水平翻转作为A。那么下一对C和D应该与A和进行不同的变换B,但是C和 也D以相同的方式进行变换。我正在尝试用下面的方式
import random\nimport numpy as np\nimport torchvision.transforms as transforms\nfrom PIL import Image\n\nimg_a = Image.open("sample_ajpg") # note that two images have the same size\nimg_b = Image.open("sample_b.png")\nimg_c, img_d = Image.open("sample_c.jpg"), Image.open("sample_d.png")\n\ntransform = transforms.RandomChoice(\n [transforms.RandomHorizontalFlip(), \n transforms.RandomVerticalFlip()]\n)\nrandom.seed(0)\ndisplay(transform(img_a))\ndisplay(transform(img_b))\n\nrandom.seed(1)\ndisplay(transform(img_c))\ndisplay(transform(img_d))\nRun Code Online (Sandbox Code Playgroud)\n然而\xe3\x80\x81上面的代码没有选择相同的转换,并且根据我的测试,它取决于调用的次数transform。
有没有办法transforms.RandomChoice在指定时强制使用相同的转换?
我需要避免从网上下载模型(由于安装的机器的限制)。
这可行,但它从互联网下载模型
model = torch.hub.load('pytorch/vision:v0.9.0', 'deeplabv3_resnet101', pretrained=True)
Run Code Online (Sandbox Code Playgroud)
我已将.pth文件和hubconf.py文件放在 /tmp/ 文件夹中,并将我的代码更改为
model = torch.hub.load('/tmp/', 'deeplabv3_resnet101', pretrained=True, source='local')
Run Code Online (Sandbox Code Playgroud)
但令我惊讶的是,它仍然从互联网上下载模型。我究竟做错了什么?如何在本地加载模型?
只是为了向您提供更多详细信息,我在 Docker 容器中执行所有这些操作,该容器在运行时具有只读卷,因此这就是新文件下载失败的原因。
运行以下脚本后出现错误:
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils import data
from torch.utils.data import DataLoader
import torchvision.transforms as transforms
import cv2
import numpy as np
import csv
Run Code Online (Sandbox Code Playgroud)
samples = []
with open('data/driving_log.csv') as csvfile:
reader = csv.reader(csvfile)
next(reader, None)
for line in reader:
samples.append(line)
Run Code Online (Sandbox Code Playgroud)
train_len = int(0.8*len(samples))
valid_len = len(samples) - train_len
train_samples, validation_samples = data.random_split(samples, lengths=[train_len, valid_len])
Run Code Online (Sandbox Code Playgroud)
def augment(imgName, angle):
name = 'data/IMG/' + imgName.split('/')[-1]
current_image = cv2.imread(name)
current_image …Run Code Online (Sandbox Code Playgroud) 我不明白标准化是如何Pytorch运作的。
我想将shape张量中所有列的均值0和标准差设置为。1x(2, 2, 3)
一个简单的例子:
>>> x = torch.tensor([[[ 1., 2., 3.],
[ 4., 5., 6.]],
[[ 7., 8., 9.],
[10., 11., 12.]]])
>>> norm = transforms.Normalize((0, 0), (1, 1))
>>> norm(x)
tensor([[[ 1., 2., 3.],
[ 4., 5., 6.]],
[[ 7., 8., 9.],
[10., 11., 12.]]])
Run Code Online (Sandbox Code Playgroud)
因此,应用归一化变换时没有任何变化。这是为什么?
当我使用pytorch=1.10.0、torchvision=0.11.1的环境运行代码时,运行到了from torchvision.models.utils import load_state_dict_from_url 的语句。出现以下错误时会出现:
>>> from torchvision.models.utils import load_state_dict_from_url
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'torchvision.models.utils'
Run Code Online (Sandbox Code Playgroud) 我在 PyTorch 文档中查看了本教程以了解迁移学习。有一句我没看懂。
使用 计算损失后,使用 计算loss = criterion(outputs, labels)运行损失running_loss += loss.item() * inputs.size(0),最后使用 计算epoch 损失running_loss / dataset_sizes[phase]。
不loss.item()应该用于整个小批量(如果我错了,请纠正我)。即,如果batch_size是 4,loss.item()将给出整个 4 张图像集的损失。如果这是真的,为什么在计算时loss.item()乘以?在这种情况下,这一步不是像一个额外的乘法吗?inputs.size(0)running_loss
任何帮助,将不胜感激。谢谢!
尝试在 Colab 中使用 pytorch torch.datasets.ImageFolder 加载训练数据。
transform = transforms.Compose([transforms.Resize(400),
transforms.ToTensor()])
dataset_path = 'ss/'
dataset = datasets.ImageFolder(root=dataset_path, transform=transform)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=20)
Run Code Online (Sandbox Code Playgroud)
我遇到了以下错误:
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-27-7abcc1f434b1> in <module>()
2 transforms.ToTensor()])
3 dataset_path = 'ss/'
----> 4 dataset = datasets.ImageFolder(root=dataset_path, transform=transform)
5 dataloader = torch.utils.data.DataLoader(dataset, batch_size=20)
3 frames
/usr/local/lib/python3.7/dist-packages/torchvision/datasets/folder.py in make_dataset(directory, class_to_idx, extensions, is_valid_file)
100 if extensions is not None:
101 msg += f"Supported extensions are: {', '.join(extensions)}"
--> 102 raise FileNotFoundError(msg)
103
104 return instances
FileNotFoundError: …Run Code Online (Sandbox Code Playgroud) machine-learning computer-vision pytorch torchvision pytorch-dataloader
我得到的错误TypeError: pic should be PIL Image or ndarray. Got <class 'numpy.ndarray'>,当我尝试加载非图像数据集通过DataLoader。的版本torch和torchvision是1.0.1,和0.2.2.post3分别。Python 的版本3.7.1在Windows 10机器上。
这是代码:
class AndroDataset(Dataset):
def __init__(self, csv_path):
self.transform = transforms.Compose([transforms.ToTensor()])
csv_data = pd.read_csv(csv_path)
self.csv_path = csv_path
self.features = []
self.classes = []
self.features.append(csv_data.iloc[:, :-1].values)
self.classes.append(csv_data.iloc[:, -1].values)
def __getitem__(self, index):
# the error occurs here
return self.transform(self.features[index]), self.transform(self.classes[index])
def __len__(self):
return len(self.features)
Run Code Online (Sandbox Code Playgroud)
我设置了加载器:
training_data = AndroDataset('android.csv')
train_loader = DataLoader(dataset=training_data, batch_size=batch_size, shuffle=True) …Run Code Online (Sandbox Code Playgroud)