imb*_*_nl 4 python deep-learning pytorch
我正在学习深度学习,并试图理解下面给出的 pytorch 代码。我正在努力理解概率计算是如何工作的。可以以某种方式将其分解为外行人的术语。万分感谢。
ps = model.forward(图像[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,:])
Run Code Online (Sandbox Code Playgroud)
我是外行,所以我会用外行的条款来帮助你:)
input_size = 784
hidden_sizes = [128, 64]
output_size = 10
Run Code Online (Sandbox Code Playgroud)
这些是网络层的参数。每个神经网络由 组成layers,每个layer都有一个输入和一个输出形状。
具体input_size处理第一层的输入形状。这是input_size整个网络的。输入到网络中的每个样本将是一个长度为 784 的一维向量(长度为 784 的数组)。
hidden_size处理网络内部的形状。稍后我们将介绍这一点。
output_size处理最后一层的输出形状。这意味着我们的网络将为每个样本输出一个长度为 10 的一维向量。
现在逐行分解模型定义:
model = nn.Sequential(nn.Linear(input_size, hidden_sizes[0]),
Run Code Online (Sandbox Code Playgroud)
该nn.Sequential部分简单地定义了一个网络,输入的每个参数按该顺序定义了该网络中的一个新层。
nn.Linear(input_size, hidden_sizes[0])是这种层的一个例子。它是我们网络的第一层,输入大小为input_size,输出大小为向量hidden_sizes[0]。输出的大小被认为是“隐藏的”,因为它不是整个网络的输入或输出。它“隐藏”是因为它位于网络内部,远离您实际使用时与之交互的网络的输入和输出端。
之所以调用Linear它,是因为它通过将输入乘以其权重矩阵并将其偏差矩阵添加到结果中来应用线性变换。(Y = Ax + b,Y = 输出,x = 输入,A = 权重,b = 偏差)。
nn.ReLU(),
Run Code Online (Sandbox Code Playgroud)
ReLU 是激活函数的一个例子。这个函数所做的是对最后一层(上面讨论的层)的输出应用某种转换,并输出该转换的结果。在这种情况下,正在使用的ReLU函数是定义为的函数ReLU(x) = max(x, 0)。神经网络中使用激活函数是因为它们会产生非线性。这允许您的模型对非线性关系进行建模。
nn.Linear(hidden_sizes[0], hidden_sizes[1]),
Run Code Online (Sandbox Code Playgroud)
从我们上面讨论的内容来看,这是layer. 它接受一个输入hidden_sizes[0](与最后一层的输出形状相同)并输出一个长度为 的一维向量hidden_sizes[1]。
nn.ReLU(),
Run Code Online (Sandbox Code Playgroud)
ReLU再次苹果的功能。
nn.Linear(hidden_sizes[1], output_size)
Run Code Online (Sandbox Code Playgroud)
与上面两层相同,但我们的输出形状是output_size这次。
nn.Softmax(dim=1))
Run Code Online (Sandbox Code Playgroud)
另一个激活函数。这个激活函数将输出的 logitsnn.Linear转换为实际的概率分布。这让模型输出每个类别的概率。至此,我们的模型就建立好了。
# Forward pass through the network and display output
images, labels = next(iter(trainloader))
images.resize_(images.shape[0], 1, 784)
print(images.shape)
Run Code Online (Sandbox Code Playgroud)
这些只是预处理训练数据并将其放入正确的格式
ps = model.forward(images[0,:])
Run Code Online (Sandbox Code Playgroud)
这将图像通过模型(前向传递)并应用先前在层中讨论的操作。你得到结果输出。