我目前正在使用 fast.ai 来训练图像分类器模型。
data = ImageDataBunch.single_from_classes(path, classes, ds_tfms=get_transforms(), size=224).normalize(imagenet_stats)
learner = cnn_learner(data, models.resnet34)
learner.model.load_state_dict(
torch.load('stage-2.pth', map_location="cpu")
)
Run Code Online (Sandbox Code Playgroud)
这导致:
torch.load('stage-2.pth', map_location="cpu") 文件“/usr/local/lib/python3.6/site-packages/torch/nn/modules/module.py”,第 769 行,在load_state_dict 自我。类。name , "\n\t".join(error_msgs))) RuntimeError: Error(s) in loading state_dict for Sequential:
...
state_dict 中的意外键:“model”、“opt”。
我环顾四周并尝试使用以下解决方案:
# original saved file with DataParallel
state_dict = torch.load('stage-2.pth', map_location="cpu")
# create new OrderedDict that does not contain `module.`
from collections import OrderedDict
new_state_dict = OrderedDict()
for k, v in state_dict.items():
name = k[7:] # remove `module.`
new_state_dict[name] = v …
Run Code Online (Sandbox Code Playgroud) 我正在使用Oxford Pet 数据集和预训练的 Resnet18 CNN实现一个图像分类器。该数据集由 37 个类别组成,每个类别约有 200 张图像。
我想使用 CNN 作为特征提取器来对宠物进行分类,而不是使用 CNN 的最终 fc 层作为输出来进行预测。
对于每个图像,我想从最后一个隐藏层(应该在1000 维输出层之前)获取特征。我的模型正在使用 Relu 激活,所以我应该在 ReLU 之后获取输出(因此所有值都将为非负)
这是代码(遵循Pytorch 上的迁移学习教程):
加载数据中
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
image_datasets = {"train": datasets.ImageFolder('images_new/train', transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
normalize
])), "test": datasets.ImageFolder('images_new/test', transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
normalize
]))
}
dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=4,
shuffle=True, num_workers=4, pin_memory=True)
for x in ['train', 'test']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'test']} …
Run Code Online (Sandbox Code Playgroud) 我正在研究时间序列问题。不同的训练时间序列数据存储在一个 30GB 的大型 JSON 文件中。在 tensorflow 中,我知道如何使用 TF 记录。pytorch 中是否有类似的方法?
这似乎是一个 XY 问题,但最初我有大量数据并且我无法在给定的资源中进行训练(RAM 问题)。所以我想我可以使用batch
的功能Pytorch
。但我想使用除深度学习之外的 KNN、随机森林、聚类等方法。那么有可能吗,或者我可以在 Pytorch 中使用 scikit 库吗?
当我尝试加载 pytorch 检查点时:
checkpoint = torch.load(pathname)
Run Code Online (Sandbox Code Playgroud)
我懂了:
RuntimeError: cuda runtime error (35) : CUDA 驱动程序版本对于 Torch/csrc/cuda/Module.cpp:51 中的 CUDA 运行时版本不足
我用可用的 GPU 创建了检查点,但现在只有 CPU 可用。
如何加载检查点?
当我将“.pth”模型从 PyTorch 转换为 ONNX 时,Unexpected keys and missing keys
会发生类似错误。
这是我的模型:
1 import torch
2 import torch.onnx
3 from mmcv import runner
4 import torch.`enter code here`nn as nn
5 from mobilenet import MobileNet
6 # A model class instance (class not shown)
7 md=MobileNet(1,2)
8 model = md
9 device_ids = [0,2,6,7,8]
10 model = nn.DataParallel(model,device_ids)
11 #torch.backends.cudnn.benchmark = True
12 # Load the weights from a file (.pth usually)
13 runner.load_checkpoint(model,'../mmdetection- master/work_dmobile/faster_rcnn_r50_fpn_1x/epoch_60.pth')
14 #model = MMDataParallel(model, device_ids=[0]) …
Run Code Online (Sandbox Code Playgroud) 给定一个数字和一个编码长度,如何将数字转换为张量的二进制表示?
例如,给定 number6
和 width 8
,我怎样才能获得张量:
(0, 0, 0, 0, 0, 1, 1, 0)
Run Code Online (Sandbox Code Playgroud) 我正在尝试训练 CNNFashion-MNIST
使用Conv2d
、Maxpool
和Linear
层对数据中的图像进行分类。我in_features = 12*4*4
在nn.Linear
层中遇到了如下所述的代码。
我能否获得有关如何in_features
为 nn.Linear 层选择参数的帮助?
class Network(nn.Module):
def __init__(self):
super(Network, self).__init__()
self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5)
self.conv2 = nn.Conv2d(in_channels=6, out_channels=12, kernel_size=5)
self.fc1 = nn.Linear(in_features=12*4*4, out_features=120)
self.fc2 = nn.Linear(in_features=120, out_features=60)
self.out = nn.Linear(in_features=60, out_features=10)
Run Code Online (Sandbox Code Playgroud) 所以,我有一个 U-Net 模型,我将 5000x5000x3 的图像输入到模型中,然后我得到了上面的错误。
所以这是我的模型。
import torch
import torch.nn as nn
def double_conv(in_channels, out_channels):
return nn.Sequential(
nn.Conv2d(in_channels, out_channels, 3, padding=1),
nn.ReLU(inplace=True),
nn.Conv2d(out_channels, out_channels, 3, padding=1),
nn.ReLU(inplace=True)
)
class UNeT(nn.Module):
def __init__(self, n_class):
super().__init__()
self.dconv_down1 = double_conv(3, 64)
self.dconv_down2 = double_conv(64, 128)
self.dconv_down3 = double_conv(128, 256)
self.dconv_down4 = double_conv(256, 512)
self.maxpool = nn.MaxPool2d(2)
self.upsample = nn.Upsample(scale_factor=2, mode='bilinear',
align_corners=True)
self.dconv_up3 = double_conv(256 + 512, 256)
self.dconv_up2 = double_conv(128 + 256, 128)
self.dconv_up1 = double_conv(128 + 64, 64)
self.conv_last = nn.Conv2d(64, n_class, …
Run Code Online (Sandbox Code Playgroud) python image-processing computer-vision deep-learning pytorch
我有以下 PyTorch 张量:
predicted = torch.tensor([4, 4, 4, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 4, 1, 1, 4, 0, 4, 4, 1, 4, 1])
target = torch.tensor([3, 0, 0, 1, 1, 0, 1, 1, 1, 3, 2, 4, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1,])
Run Code Online (Sandbox Code Playgroud)
我想用以下几行计算它们之间的交叉熵损失(作为逻辑回归实现的一部分):
loss = nn.CrossEntropyLoss()
computed_loss = loss(predicted, target)
Run Code Online (Sandbox Code Playgroud)
但是,当我的代码运行时,我得到以下IndexError:
IndexError: Dimension out of range (expected to be in range of [-1, …
Run Code Online (Sandbox Code Playgroud)