神经网络—pytorch60min入门教程
生活随笔
收集整理的這篇文章主要介紹了
神经网络—pytorch60min入门教程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#coding=utf-8
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variableclass Net(nn.Module):#定義Net的初始化函數,這個函數定義了該神經網絡的基本結構def __init__(self):super(Net, self).__init__() #復制并使用Net的父類的初始化方法,即先運行nn.Module的初始化函數self.conv1 = nn.Conv2d(1, 6, 5) # 定義conv1函數的是圖像卷積函數:輸入為圖像(1個頻道,即灰度圖),輸出為 6張特征圖, 卷積核為5x5正方形self.conv2 = nn.Conv2d(6, 16, 5)# 定義conv2函數的是圖像卷積函數:輸入為6張特征圖,輸出為16張特征圖, 卷積核為5x5正方形self.fc1 = nn.Linear(16*5*5, 120) # 定義fc1(fullconnect)全連接函數1為線性函數:y = Wx + b,并將16*5*5個節點連接到120個節點上。self.fc2 = nn.Linear(120, 84)#定義fc2(fullconnect)全連接函數2為線性函數:y = Wx + b,并將120個節點連接到84個節點上。self.fc3 = nn.Linear(84, 10)#定義fc3(fullconnect)全連接函數3為線性函數:y = Wx + b,并將84個節點連接到10個節點上。#定義該神經網絡的向前傳播函數,該函數必須定義,一旦定義成功,向后傳播函數也會自動生成(autograd)def forward(self, x):x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2)) #輸入x經過卷積conv1之后,經過激活函數ReLU(原來這個詞是激活函數的意思),使用2x2的窗口進行最大池化Max pooling,然后更新到x。x = F.max_pool2d(F.relu(self.conv2(x)), 2) #輸入x經過卷積conv2之后,經過激活函數ReLU,使用2x2的窗口進行最大池化Max pooling,然后更新到x。x = x.view(-1, self.num_flat_features(x)) #view函數將張量x變形成一維的向量形式,總特征數并不改變,為接下來的全連接作準備。x = F.relu(self.fc1(x)) #輸入x經過全連接1,再經過ReLU激活函數,然后更新xx = F.relu(self.fc2(x)) #輸入x經過全連接2,再經過ReLU激活函數,然后更新xx = self.fc3(x) #輸入x經過全連接3,然后更新xreturn x#使用num_flat_features函數計算張量x的總特征量(把每個數字都看出是一個特征,即特征總量),比如x是4*2*2的張量,那么它的特征總量就是16。def num_flat_features(self, x):size = x.size()[1:] # 這里為什么要使用[1:],是因為pytorch只接受批輸入,也就是說一次性輸入好幾張圖片,那么輸入數據張量的維度自然上升到了4維。【1:】讓我們把注意力放在后3維上面num_features = 1for s in size:num_features *= sreturn num_featuresnet = Net()
net# 以下代碼是為了看一下我們需要訓練的參數的數量
print net
params = list(net.parameters())k=0
for i in params:l =1print "該層的結構:"+str(list(i.size()))for j in i.size():l *= jprint "參數和:"+str(l)k = k+lprint "總參數和:"+ str(k)
?
總結
以上是生活随笔為你收集整理的神经网络—pytorch60min入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打家劫舍—leetcode198
- 下一篇: 代码执行流水之循环展开优化