<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        PyTorch上搭建簡單神經網絡實現回歸和分類的示例

        來源:懂視網 責編:小采 時間:2020-11-27 14:12:30
        文檔

        PyTorch上搭建簡單神經網絡實現回歸和分類的示例

        PyTorch上搭建簡單神經網絡實現回歸和分類的示例:本篇文章主要介紹了PyTorch上搭建簡單神經網絡實現回歸和分類的示例,現在分享給大家,也給大家做個參考。一起過來看看吧本文介紹了PyTorch上搭建簡單神經網絡實現回歸和分類的示例,分享給大家,具體如下:一、PyTorch入門1. 安裝方法登錄PyTorch官網
        推薦度:
        導讀PyTorch上搭建簡單神經網絡實現回歸和分類的示例:本篇文章主要介紹了PyTorch上搭建簡單神經網絡實現回歸和分類的示例,現在分享給大家,也給大家做個參考。一起過來看看吧本文介紹了PyTorch上搭建簡單神經網絡實現回歸和分類的示例,分享給大家,具體如下:一、PyTorch入門1. 安裝方法登錄PyTorch官網

        4. 激勵函數activationfunction

        Torch的激勵函數都在torch.nn.functional中,relu,sigmoid, tanh, softplus都是常用的激勵函數。


        相關代碼:

        import torch 
        import torch.nn.functional as F 
        from torch.autograd import Variable 
        import matplotlib.pyplot as plt 
         
        x = torch.linspace(-5, 5, 200) 
        x_variable = Variable(x) #將x放入Variable 
        x_np = x_variable.data.numpy() 
         
        # 經過4種不同的激勵函數得到的numpy形式的數據結果 
        y_relu = F.relu(x_variable).data.numpy() 
        y_sigmoid = F.sigmoid(x_variable).data.numpy() 
        y_tanh = F.tanh(x_variable).data.numpy() 
        y_softplus = F.softplus(x_variable).data.numpy() 
         
        plt.figure(1, figsize=(8, 6)) 
         
        plt.subplot(221) 
        plt.plot(x_np, y_relu, c='red', label='relu') 
        plt.ylim((-1, 5)) 
        plt.legend(loc='best') 
         
        plt.subplot(222) 
        plt.plot(x_np, y_sigmoid, c='red', label='sigmoid') 
        plt.ylim((-0.2, 1.2)) 
        plt.legend(loc='best') 
         
        plt.subplot(223) 
        plt.plot(x_np, y_tanh, c='red', label='tanh') 
        plt.ylim((-1.2, 1.2)) 
        plt.legend(loc='best') 
         
        plt.subplot(224) 
        plt.plot(x_np, y_softplus, c='red', label='softplus') 
        plt.ylim((-0.2, 6)) 
        plt.legend(loc='best') 
         
        plt.show()

        二、PyTorch實現回歸

        先看完整代碼:

        import torch 
        from torch.autograd import Variable 
        import torch.nn.functional as F 
        import matplotlib.pyplot as plt 
         
        x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # 將1維的數據轉換為2維數據 
        y = x.pow(2) + 0.2 * torch.rand(x.size()) 
         
        # 將tensor置入Variable中 
        x, y = Variable(x), Variable(y) 
         
        #plt.scatter(x.data.numpy(), y.data.numpy()) 
        #plt.show() 
         
        # 定義一個構建神經網絡的類 
        class Net(torch.nn.Module): # 繼承torch.nn.Module類 
         def __init__(self, n_feature, n_hidden, n_output): 
         super(Net, self).__init__() # 獲得Net類的超類(父類)的構造方法 
         # 定義神經網絡的每層結構形式 
         # 各個層的信息都是Net類對象的屬性 
         self.hidden = torch.nn.Linear(n_feature, n_hidden) # 隱藏層線性
        輸出 self.predict = torch.nn.Linear(n_hidden, n_output) # 輸出層線性輸出 # 將各層的神經元搭建成完整的神經網絡的前向通路 def forward(self, x): x = F.relu(self.hidden(x)) # 對隱藏層的輸出進行relu激活 x = self.predict(x) return x # 定義神經網絡 net = Net(1, 10, 1) print(net) # 打印輸出net的結構 # 定義優化器和損失函數 optimizer = torch.optim.SGD(net.parameters(), lr=0.5) # 傳入網絡參數和學習率 loss_function = torch.nn.MSELoss() # 最小均方誤差 # 神經網絡訓練過程 plt.ion() # 動態學習過程展示 plt.show() for t in range(300): prediction = net(x) # 把數據x喂給net,輸出預測值 loss = loss_function(prediction, y) # 計算兩者的誤差,要注意兩個參數的順序 optimizer.zero_grad() # 清空上一步的更新參數值 loss.backward() # 誤差反相傳播,計算新的更新參數值 optimizer.step() # 將計算得到的更新值賦給net.parameters() # 可視化訓練過程 if (t+1) % 10 == 0: plt.cla() plt.scatter(x.data.numpy(), y.data.numpy()) plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5) plt.text(0.5, 0, 'L=%.4f' % loss.data[0], fontdict={'size': 20, 'color': 'red'}) plt.pause(0.1)

        首先創建一組帶噪聲的二次函數擬合數據,置于Variable中。定義一個構建神經網絡的類Net,繼承torch.nn.Module類。Net類的構造方法中定義輸入神經元、隱藏層神經元、輸出神經元數量的參數,通過super()方法獲得Net父類的構造方法,以屬性的方式定義Net的各個層的結構形式;定義Net的forward()方法將各層的神經元搭建成完整的神經網絡前向通路。

        定義好Net類后,定義神經網絡實例,Net類實例可以直接print打印輸出神經網絡的結構信息。接著定義神經網絡的優化器和損失函數。定義好這些后就可以進行訓練了。optimizer.zero_grad()、loss.backward()、optimizer.step()分別是清空上一步的更新參數值、進行誤差的反向傳播并計算新的更新參數值、將計算得到的更新值賦給net.parameters()。循環迭代訓練過程。

        運行結果:

        Net (

        (hidden): Linear (1 -> 10)

        (predict): Linear (10 -> 1)

        )

        三、PyTorch實現簡單分類

        完整代碼:

        import torch 
        from torch.autograd import Variable 
        import torch.nn.functional as F 
        import matplotlib.pyplot as plt 
         
        # 生成數據 
        # 分別生成2組各100個數據點,增加正態噪聲,后標記以y0=0 y1=1兩類標簽,最后cat連接到一起 
        n_data = torch.ones(100,2) 
        # torch.normal(means, std=1.0, out=None) 
        x0 = torch.normal(2*n_data, 1) # 以tensor的形式給出
        輸出tensor各元素的均值,共享標準差 y0 = torch.zeros(100) x1 = torch.normal(-2*n_data, 1) y1 = torch.ones(100) x = torch.cat((x0, x1), 0).type(torch.FloatTensor) # 組裝(連接) y = torch.cat((y0, y1), 0).type(torch.LongTensor) # 置入Variable中 x, y = Variable(x), Variable(y) class Net(torch.nn.Module): def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__() self.hidden = torch.nn.Linear(n_feature, n_hidden) self.out = torch.nn.Linear(n_hidden, n_output) def forward(self, x): x = F.relu(self.hidden(x)) x = self.out(x) return x net = Net(n_feature=2, n_hidden=10, n_output=2) print(net) optimizer = torch.optim.SGD(net.parameters(), lr=0.012) loss_func = torch.nn.CrossEntropyLoss() plt.ion() plt.show() for t in range(100): out = net(x) loss = loss_func(out, y) # loss是定義為神經網絡的輸出與樣本標簽y的差別,故取softmax前的值 optimizer.zero_grad() loss.backward() optimizer.step() if t % 2 == 0: plt.cla() # 過了一道 softmax 的激勵函數后的最大概率才是預測值 # torch.max既返回某個維度上的最大值,同時返回該最大值的索引值 prediction = torch.max(F.softmax(out), 1)[1] # 在第1維度取最大值并返回索引值 pred_y = prediction.data.numpy().squeeze() target_y = y.data.numpy() plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=pred_y, s=100, lw=0, cmap='RdYlGn') accuracy = sum(pred_y == target_y)/200 # 預測中有多少和真實值一樣 plt.text(1.5, -4, 'Accu=%.2f' % accuracy, fontdict={'size': 20, 'color': 'red'}) plt.pause(0.1) plt.ioff() plt.show()

        神經網絡結構部分的Net類與前文的回歸部分的結構相同。

        需要注意的是,在循環迭代訓練部分,out定義為神經網絡的輸出結果,計算誤差loss時不是使用one-hot形式的,loss是定義在out與y上的torch.nn.CrossEntropyLoss(),而預測值prediction定義為out經過Softmax后(將結果轉化為概率值)的結果。

        運行結果:

        Net (

        (hidden): Linear (2 -> 10)

        (out):Linear (10 -> 2)

        )

        四、補充知識

        1. super()函數

        在定義Net類的構造方法的時候,使用了super(Net,self).__init__()語句,當前的類和對象作為super函數的參數使用,這條語句的功能是使Net類的構造方法獲得其超類(父類)的構造方法,不影響對Net類單獨定義構造方法,且不必關注Net類的父類到底是什么,若需要修改Net類的父類時只需修改class語句中的內容即可。

        2. torch.normal()

        torch.normal()可分為三種情況:(1)torch.normal(means,std, out=None)中means和std都是Tensor,兩者的形狀可以不必相同,但Tensor內的元素數量必須相同,一一對應的元素作為輸出的各元素的均值和標準差;(2)torch.normal(mean=0.0, std, out=None)中mean是一個可定義的float,各個元素共享該均值;(3)torch.normal(means,std=1.0, out=None)中std是一個可定義的float,各個元素共享該標準差。

        3. torch.cat(seq, dim=0)

        torch.cat可以將若干個Tensor組裝連接起來,dim指定在哪個維度上進行組裝。

        4. torch.max()

        (1)torch.max(input)→ float

        input是tensor,返回input中的最大值float。

        (2)torch.max(input,dim, keepdim=True, max=None, max_indices=None) -> (Tensor, LongTensor)

        同時返回指定維度=dim上的最大值和該最大值在該維度上的索引值。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        PyTorch上搭建簡單神經網絡實現回歸和分類的示例

        PyTorch上搭建簡單神經網絡實現回歸和分類的示例:本篇文章主要介紹了PyTorch上搭建簡單神經網絡實現回歸和分類的示例,現在分享給大家,也給大家做個參考。一起過來看看吧本文介紹了PyTorch上搭建簡單神經網絡實現回歸和分類的示例,分享給大家,具體如下:一、PyTorch入門1. 安裝方法登錄PyTorch官網
        推薦度:
        標簽: 分類 實現 to
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日韩人妻一区二区三区免费| 97无码人妻福利免费公开在线视频 | 99视频在线看观免费| 亚洲av无码精品网站| 中文字幕亚洲综合久久2| 亚洲爆乳精品无码一区二区| 国产日韩AV免费无码一区二区三区 | 免费高清小黄站在线观看| 亚洲一区二区三区无码中文字幕| 亚洲精品午夜在线观看| 激情小说亚洲图片| 久草免费福利视频| 亚洲VA综合VA国产产VA中| 亚洲码在线中文在线观看| 曰曰鲁夜夜免费播放视频 | 一道本不卡免费视频| 天天影院成人免费观看| 亚洲国产黄在线观看| 久久国产乱子伦精品免费午夜| 亚洲av综合av一区| 97国产免费全部免费观看| 亚洲AV永久无码精品一百度影院 | 亚洲一区二区三区深夜天堂| 在线观看免费视频网站色| 亚洲高清免费视频| 久久国产精品免费观看| 亚洲香蕉网久久综合影视| 免费国产黄网站在线观看可以下载| 亚洲美女视频一区| 国产免费拔擦拔擦8x| 亚洲AV无码久久久久网站蜜桃 | 西西大胆无码视频免费| 亚洲国产成人手机在线电影bd| 久久er国产精品免费观看2| 亚洲丝袜中文字幕| 国产亚洲美日韩AV中文字幕无码成人| 国产AV日韩A∨亚洲AV电影| 国产免费小视频在线观看| 久久香蕉国产线看免费| 亚洲国产成人手机在线观看| 亚洲国产精品无码专区|