python - pytorch : unable to understand model. 转发功能

标签 python deep-learning pytorch

我正在学习深度学习,并试图理解下面给出的 pytorch 代码。我正在努力理解概率计算是如何工作的。可以以某种方式将其分解为外行人的术语。万分感谢。

ps = model.forward(images[0,:])


# Hyperparameters for our network
input_size = 784
hidden_sizes = [128, 64]
output_size = 10

# Build a feed-forward network
model = nn.Sequential(nn.Linear(input_size, hidden_sizes[0]),
                      nn.ReLU(),
                      nn.Linear(hidden_sizes[0], hidden_sizes[1]),
                      nn.ReLU(),
                      nn.Linear(hidden_sizes[1], output_size),
                      nn.Softmax(dim=1))
print(model)

# Forward pass through the network and display output
images, labels = next(iter(trainloader))
images.resize_(images.shape[0], 1, 784)
print(images.shape)
ps = model.forward(images[0,:])

最佳答案

我是外行,所以我会用外行的条款来帮助你:)

input_size = 784
hidden_sizes = [128, 64]
output_size = 10

这些是网络层的参数。每个神经网络由layers组成, 和每个 layer有一个输入和一个输出形状。

具体input_size处理第一层的输入形状。这是input_size整个网络的。输入到网络中的每个样本将是一个长度为 784 的一维向量(长度为 784 的数组)。
hidden_size处理网络内部的形状。稍后我们将介绍这一点。
output_size处理最后一层的输出形状。这意味着我们的网络将为每个样本输出一个长度为 10 的一维向量。

现在逐行分解模型定义:
model = nn.Sequential(nn.Linear(input_size, hidden_sizes[0]),
nn.Sequential part 只是定义了一个网络,输入的每个参数都按该顺序定义了该网络中的一个新层。
nn.Linear(input_size, hidden_sizes[0])是这种层的一个例子。它是我们网络的第一层,接收大小为 input_size 的输入。 ,并输出大小为 hidden_sizes[0] 的向量.输出的大小被认为是“隐藏的”,因为它不是整个网络的输入或输出。它“隐藏”是因为它位于网络内部,远离您实际使用时与之交互的网络的输入和输出端。

这叫做Linear因为它通过将输入乘以其权重矩阵并将其偏差矩阵添加到结果中来应用线性变换。 (Y = Ax + b,Y = 输出,x = 输入,A = 权重,b = 偏差)。
nn.ReLU(),

ReLU 是激活函数的一个例子。这个函数所做的是对最后一层(上面讨论的层)的输出应用某种转换,并输出该转换的结果。在这种情况下,使用的函数是 ReLU函数,定义为 ReLU(x) = max(x, 0) .神经网络中使用激活函数是因为它们会产生非线性。这允许您的模型对非线性关系进行建模。
nn.Linear(hidden_sizes[0], hidden_sizes[1]),

从我们上面讨论的内容来看,这是 layer 的另一个例子。 .它需要输入 hidden_sizes[0] (与最后一层的输出形状相同)并输出长度为 hidden_sizes[1] 的一维向量.
nn.ReLU(),

苹果ReLU再次发挥作用。
nn.Linear(hidden_sizes[1], output_size)

和上面两层一样,但是我们的输出形状是output_size这次。
nn.Softmax(dim=1))

另一个激活函数。这个激活函数将 nn.Linear 输出的 logits 转化为成一个实际的概率分布。这让模型输出每个类别的概率。至此,我们的模型就建立好了。
# Forward pass through the network and display output
images, labels = next(iter(trainloader))
images.resize_(images.shape[0], 1, 784)
print(images.shape)

这些只是预处理训练数据并将其放入正确的格式
ps = model.forward(images[0,:])

这将图像通过模型(前向传递)并应用先前在层中讨论的操作。你得到结果输出。

关于python - pytorch : unable to understand model. 转发功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54239125/

相关文章:

python - 部署caffe回归模型

java - 从 deeplearning4j 层提取特征

python - 如何为 4d 张量中的 k 个最大元素创建一个单热张量?

pytorch - PyTorch中的唯一张量值

python - 使用 Tensorflow/PyTorch 加速自定义函数的最小化

python - CELERYBEAT_SCHEDULE 中的任务未被处理

python - 如何 'zero' 输出数组中的行和列

python - 数据库列不存在

python - 两个字符串python之间的正则表达式文本

pytorch - 为什么即使我将可见 CUDA 设置为 2,DDP 中的 `local_rank` 仍为零?