我view()
对以下代码片段中的方法感到困惑.
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2,2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16*5*5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16*5*5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
net = Net()
Run Code Online (Sandbox Code Playgroud)
我的困惑在于以下几行.
x = x.view(-1, 16*5*5)
Run Code Online (Sandbox Code Playgroud)
tensor.view()
功能有什么作用?我已经在许多地方看到了它的用法,但我无法理解它如何解释它的参数.
如果我将负值作为参数给view()
函数会发生什么?例如,如果我打电话会发生什么tensor_variable.view(1, 1, -1)
?
任何人都可以view()
通过一些例子解释功能的主要原理吗?
我正在寻找在PyTorch中保存训练模型的替代方法.到目前为止,我找到了两种选择.
我的问题是,为什么第二种方法更受欢迎?是否因为torch.nn模块具有这两个功能而我们被鼓励使用它们?
我正在阅读PyTorch的文档,并找到了他们编写的示例
gradients = torch.FloatTensor([0.1, 1.0, 0.0001])
y.backward(gradients)
print(x.grad)
Run Code Online (Sandbox Code Playgroud)
其中x是一个初始变量,从中构造y(一个3向量).问题是,渐变张量的0.1,1.0和0.0001参数是什么?文档不是很清楚.
我想知道是否pytorch
正在使用我的GPU.可以nvidia-smi
在进程中检测GPU是否有任何活动,但我想要用python
脚本编写的东西.
有办法吗?
我正在使用此代码,并且model.eval()
在某些情况下看到了。
我知道它应该允许我“评估我的模型”,但我不明白什么时候应该和不应该使用它,或者如果关闭如何关闭。
我想运行上面的代码来训练网络,并且还能够在每个时期运行验证。我还是做不到。
有什么办法,我可以在PyTorch中打印模型的摘要,就像Keras中的model.summary()
方法一样,如下所示?
Model Summary:
____________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
====================================================================================================
input_1 (InputLayer) (None, 1, 15, 27) 0
____________________________________________________________________________________________________
convolution2d_1 (Convolution2D) (None, 8, 15, 27) 872 input_1[0][0]
____________________________________________________________________________________________________
maxpooling2d_1 (MaxPooling2D) (None, 8, 7, 27) 0 convolution2d_1[0][0]
____________________________________________________________________________________________________
flatten_1 (Flatten) (None, 1512) 0 maxpooling2d_1[0][0]
____________________________________________________________________________________________________
dense_1 (Dense) (None, 1) 1513 flatten_1[0][0]
====================================================================================================
Total params: 2,385
Trainable params: 2,385
Non-trainable params: 0
Run Code Online (Sandbox Code Playgroud) 我正在尝试按如下方式训练以下 CNN,但我一直收到关于 .cuda() 的相同错误,我不知道如何修复它。到目前为止,这是我的一段代码。
import matplotlib.pyplot as plt
import numpy as np
import torch
from torch import nn
from torch import optim
import torch.nn.functional as F
import torchvision
from torchvision import datasets, transforms, models
from torch.utils.data.sampler import SubsetRandomSampler
data_dir = "/home/ubuntu/ML2/ExamII/train2/"
valid_size = .2
# Normalize the test and train sets with torchvision
train_transforms = transforms.Compose([transforms.Resize(224),
transforms.ToTensor(),
])
test_transforms = transforms.Compose([transforms.Resize(224),
transforms.ToTensor(),
])
# ImageFolder class to load the train and test images
train_data = datasets.ImageFolder(data_dir, transform=train_transforms)
test_data = datasets.ImageFolder(data_dir, …
Run Code Online (Sandbox Code Playgroud) 我无法理解PyTorch 文档中的示例如何对应于解释:
返回一个新的张量,其尺寸为 1,插入到指定位置。[...]
Run Code Online (Sandbox Code Playgroud)>>> x = torch.tensor([1, 2, 3, 4]) >>> torch.unsqueeze(x, 0) tensor([[ 1, 2, 3, 4]]) >>> torch.unsqueeze(x, 1) tensor([[ 1], [ 2], [ 3], [ 4]])
我在 Colab Pro+(具有高 RAM 选项)上运行神经网络时发现了这个问题。
运行时错误:CUDA 内存不足。尝试分配 8.00 GiB(GPU 0;15.90 GiB 总容量;12.04 GiB 已分配;2.72 GiB 空闲;PyTorch 总共保留 12.27 GiB)如果保留内存 >> 已分配内存,请尝试设置 max_split_size_mb 以避免碎片。请参阅内存管理和 PYTORCH_CUDA_ALLOC_CONF 的文档
我已经将批量大小减少到 2。我使用该格式上传数据h5py
。
此时,我认为我唯一可以尝试的就是设置max_split_size_mb
.
我找不到任何有关如何实施max_split_size_mb
. PyTorch文档对我来说不清楚。
如何在PyTorch中的网络中初始化权重和偏差(例如,使用He或Xavier初始化)?