Pytorch中DNN入門思想及實現

DNN全連接層(線性層)

計算公式:

y = w * x + b
W和b是參與訓練的參數
W的維度決定了隱含層輸出的維度,一般稱為隱單元個數(hidden size)
b是偏差值(本文沒考慮)
舉例:
輸入:x (維度1 x 3)
隱含層1:w(維度3 x 5)
隱含層2: w(維度5 x 2)
DNN模型

個人思想如下:

比如說如上圖,我們有輸入層是3個,中間層是5個,輸出層要求是2個。利用線性代數,輸入是【1×3】,那么需要乘【3×5】的權重矩陣得到【1×5】,再由【1×5】乘【5×2】的權重矩陣,最后得到【1×2】的結果。在本代碼中沒有考慮偏差值(bias),利用pytorch中隨機初始化的權重實現模型預測。

import torch
import torch.nn as nn
import numpy as np
"""
用pytorch框架實現單層的全連接網絡
不使用偏置bias
"""
class TorchModel(nn.Module):    #nn.module是torch自帶的庫def __init__(self, input_size, hidden_size, output_size):super(TorchModel, self).__init__()self.layer1 = nn.Linear(input_size, hidden_size, bias=False)#nn.linear是torch的線性層,input_size是輸入的維度,hidden_size是這一層的輸出的維度self.layer2 = nn.Linear(hidden_size, output_size, bias=False)#這個線性層可以有很多個def forward(self, x):   #開始計算的函數hidden = self.layer1(x)     #傳入輸入第一層# print("torch hidden", hidden)y_pred = self.layer2(hidden)       #傳入輸入第二層return y_pred
x = np.array([1, 0, 0])  #網絡輸入#torch實驗
torch_model = TorchModel(len(x), 5, 2)  #這三個數分別代表輸入,中間,結果層的維度
#print(torch_model.state_dict())        #可以打印出pytorch隨機初始化的權重
torch_model_w1 = torch_model.state_dict()["layer1.weight"].numpy()
#通過取字典方式將權重取出來并把torch的權重轉化為numpy的
torch_model_w2 = torch_model.state_dict()["layer2.weight"].numpy()
#print(torch_model_w1, "torch w1 權重")	
#這里你會發現隨機初始化的權重矩陣是5×3,所以當自定義模型時需要轉置,但是在pytorch中會自動轉置相乘
#print(torch_model_w2, "torch w2 權重")
torch_x = torch.FloatTensor([x])    #numpy的輸入轉化為torch
y_pred = torch_model.forward(torch_x)
print("torch模型預測結果:", y_pred)

以上是pytorch模型實現DNN的簡單方法。

自定義模型手工實現:

(注意因為自定義模型需要得到模型中的權重,而上面代碼利用的是pytorch的隨機自定義模型,為了能讓兩者對比答案是否相同,自定義模型中的權重需要繼承pytorch的隨機權重)

"""
手動實現簡單的神經網絡
用自定義框架實現單層的全連接網絡
不使用偏置bias
"""
#自定義模型
class DiyModel:def __init__(self, weight1, weight2):self.weight1 = weight1      #收到在torch隨機的權重self.weight2 = weight2def forward(self, x):hidden = np.dot(x, self.weight1.T)  #將輸入與第一層權重的轉置相乘y_pred = np.dot(hidden, self.weight2.T)return y_preddiy_model = DiyModel(torch_model_w1, torch_model_w2)
y_pred_diy = diy_model.forward(np.array([x]))
print("diy模型預測結果:", y_pred_diy)

如需運行須將自定義模型放入pytorch的代碼下面繼承輸入和隨機權重,通過最后結果能發現兩者相同。

結果如下:

結果對比
可以發現兩者代碼結果相同~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389589.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389589.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389589.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IDEA去除mapper.xml文件中的sql語句的背景色

2019獨角獸企業重金招聘Python工程師標準>>> IDEA版本 2017.3 mapper.xml文件中的sql語句,總是黃色一大片,看起來不舒服。 按如下設置進行設置即可 此時設置完還有點背景色 再進行一個設置 Ok,完美解決 轉載于:https://my.oschina.net/u/3939…

vc6.0 繪制散點圖_vc有關散點圖的一切

vc6.0 繪制散點圖Scatterplots are one of the most popular visualization techniques in the world. Its purposes are recognizing clusters and correlations in ‘pairs’ of variables. There are many variations of scatter plots. We will look at some of them.散點圖…

sudo配置臨時取得root權限

sudo配置臨時取得root權限系統中的普通用戶有時需要root權限執行某種操作,要是使用su - root的話必須要知道root的密碼,這是不安全的,所以有了sudo,root可以對/etc/sudoers做一定的配置,讓普通用戶在不切換到root的情況…

Pytorch中RNN入門思想及實現

RNN循環神經網絡 整體思想: 將整個序列劃分成多個時間步,將每一個時間步的信息依次輸入模型,同時將模型輸出的結果傳給下一個時間步,也就是說后面的結果受前面輸入的影響。 RNN的實現公式: 個人思路: 首…

小扎不哭!FB又陷數據泄露風波,9000萬用戶受影響

對小扎來說,又是多災多難的一個月。 繼不久前Twitter曝出修補了一個可能造成數以百萬計用戶私密消息被共享給第三方開發人員的漏洞,連累Facebook股價跟著短線跳水之后,9月28日,Facebook又雙叒叕曝出因安全漏洞遭到黑客攻擊&#…

在衡量歐洲的政治意識形態時,調查規模的微小變化可能會很重要

(Related post: On a scale from 1 to 10, how much do the numbers used in survey scales really matter?)(相關文章: 從1到10的量表,調查量表中使用的數字到底有多重要? ) At Pew Research Center, survey questions about respondents’…

Pytorch中CNN入門思想及實現

CNN卷積神經網絡 基礎概念: 以卷積操作為基礎的網絡結構,每個卷積核可以看成一個特征提取器。 思想: 每次觀察數據的一部分,如圖,在整個矩陣中只觀察黃色部分33的矩陣,將這【33】矩陣(點乘)權重得到特…

java常用設計模式一:單例模式

1、餓漢式 package singleton.demo;/*** author Administrator* date 2019/01/07*/ public class Singleton {//在調用getInstance方法前,實例已經創建好private static Singleton instance new Singleton();//私有構造,防止被實例化private Singleton(…

SDUT-2121_數據結構實驗之鏈表六:有序鏈表的建立

數據結構實驗之鏈表六:有序鏈表的建立 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 輸入N個無序的整數,建立一個有序鏈表,鏈表中的結點按照數值非降序排列,輸出該有序鏈表。 Input 第一行輸入整數個數N&…

事件映射 消息映射_映射幻影收費站

事件映射 消息映射When I was a child, I had a voracious appetite for books. I was constantly visiting the library and picking new volumes to read, but one I always came back to was The Phantom Tollbooth, written by Norton Juster and illustrated by Jules Fei…

前端代碼調試常用

轉載于:https://www.cnblogs.com/tabCtrlShift/p/9076752.html

Pytorch中BN層入門思想及實現

批歸一化層-BN層(Batch Normalization) 作用及影響: 直接作用:對輸入BN層的張量進行數值歸一化,使其成為均值為零,方差為一的張量。 帶來影響: 1.使得網絡更加穩定,結果不容易受到…

JDK源碼學習筆記——TreeMap及紅黑樹

找了幾個分析比較到位的,不再重復寫了…… Java 集合系列12之 TreeMap詳細介紹(源碼解析)和使用示例 【Java集合源碼剖析】TreeMap源碼剖析 java源碼分析之TreeMap基礎篇 關于紅黑樹: Java數據結構和算法(十一)——紅黑樹 【數據結…

匿名內部類和匿名類_匿名schanonymous

匿名內部類和匿名類Everybody loves a fad. You can pinpoint someone’s generation better than carbon dating by asking them what their favorite toys and gadgets were as a kid. Tamagotchi and pogs? You were born around 1988, weren’t you? Coleco Electronic Q…

Pytorch框架中SGD&Adam優化器以及BP反向傳播入門思想及實現

因為這章內容比較多,分開來敘述,前面先講理論后面是講代碼。最重要的是代碼部分,結合代碼去理解思想。 SGD優化器 思想: 根據梯度,控制調整權重的幅度 公式: 權重(新) 權重(舊) - 學習率 梯度 Adam…

朱曄和你聊Spring系列S1E3:Spring咖啡罐里的豆子

標題中的咖啡罐指的是Spring容器,容器里裝的當然就是被稱作Bean的豆子。本文我們會以一個最基本的例子來熟悉Spring的容器管理和擴展點。閱讀PDF版本 為什么要讓容器來管理對象? 首先我們來聊聊這個問題,為什么我們要用Spring來管理對象&…

ab實驗置信度_為什么您的Ab測試需要置信區間

ab實驗置信度by Alos Bissuel, Vincent Grosbois and Benjamin HeymannAlosBissuel,Vincent Grosbois和Benjamin Heymann撰寫 The recent media debate on COVID-19 drugs is a unique occasion to discuss why decision making in an uncertain environment is a …

基于Pytorch的NLP入門任務思想及代碼實現:判斷文本中是否出現指定字

今天學了第一個基于Pytorch框架的NLP任務: 判斷文本中是否出現指定字 思路:(注意:這是基于字的算法) 任務:判斷文本中是否出現“xyz”,出現其中之一即可 訓練部分: 一&#xff…

erlang下lists模塊sort(排序)方法源碼解析(二)

上接erlang下lists模塊sort(排序)方法源碼解析(一),到目前為止,list列表已經被分割成N個列表,而且每個列表的元素是有序的(從大到小) 下面我們重點來看看mergel和rmergel模塊,因為我…

洛谷P4841 城市規劃(多項式求逆)

傳送門 這題太珂怕了……如果是我的話完全想不出來…… 題解 1 //minamoto2 #include<iostream>3 #include<cstdio>4 #include<algorithm>5 #define ll long long6 #define swap(x,y) (x^y,y^x,x^y)7 #define mul(x,y) (1ll*(x)*(y)%P)8 #define add(x,y) (x…