色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

NAC的工作原理,以及它如何處理加法和減法等操作

Tensorflowers ? 來源:未知 ? 作者:李倩 ? 2018-10-10 11:34 ? 次閱讀

DeepMind 最近發布了一篇新的論文---《神經算術邏輯單元(NALU)》(https://arxiv.org/abs/1808.00508),這是一篇很有趣的論文,它解決了深度學習中的一個重要問題,即教導神經網絡計算。 令人驚訝的是,盡管神經網絡已經能夠在許多任務,如肺癌分類中獲得卓絕表現,卻往往在一些簡單任務,像計算數字上苦苦掙扎。

在一個展示網絡如何努力從新數據中插入特征的實驗中,我們的研究發現,他們能夠用 -5 到 5 之間的數字將訓練數據分類,準確度近乎完美,但對于訓練數據之外的數字,網絡幾乎無法歸納概括。

論文提供了一個解決方案,分成兩個部分。以下我將簡單介紹一下 NAC 的工作原理,以及它如何處理加法和減法等操作。之后,我會介紹 NALU,它可以處理更復雜的操作,如乘法和除法。 我提供了可以嘗試演示這些代碼的代碼,您可以閱讀上述的論文了解更多詳情。

第一神經網絡(NAC)

神經累加器(簡稱 NAC)是其輸入的一種線性變換。什么意思呢? 它是一個轉換矩陣,是 tanh(W_hat)和 sigmoid(M_hat)的元素乘積。 最后,轉換矩陣 W 乘以輸入(x)。

Python 中的 NAC

1import tensorflow as tf

2

3# NAC

4W_hat = tf.Variable(tf.truncated_normal(shape, stddev=0.02))

5M_hat = tf.Variable(tf.truncated_normal(shape, stddev=0.02))

6

7W = tf.tanh(W_hat) * tf.sigmoid(M_hat)

8# Forward propogation

9a = tf.matmul(in_dim, W)

NAC

第二神經網絡(NALU)

神經算術邏輯單元,或者我們簡稱之為 NALU,是由兩個 NAC 單元組成。 第一個 NAC g 等于 sigmoid(Gx)。 第二個 NAC 在一個等于 exp 的日志空間 m 中運行 (W(log(|x| + epsilon)))

Python 中的 NALU

1import tensorflow as tf

2

3# NALU

4G = tf.Variable(tf.truncated_normal(shape, stddev=0.02))

5

6m = tf.exp(tf.matmul(tf.log(tf.abs(in_dim) + epsilon), W))

7

8g = tf.sigmoid(tf.matmul(in_dim, G))

9

10y = g * a + (1 - g) * m

NALU

通過學習添加來測試 NAC

現在讓我們進行測試,首先將 NAC 轉換為函數。

1# Neural Accumulator

2def NAC(in_dim, out_dim):

3

4in_features = in_dim.shape[1]

5

6# define W_hat and M_hat

7W_hat = tf.get_variable(name = 'W_hat', initializer=tf.initializers.random_uniform(minval=-2, maxval=2),shape=[in_features, out_dim], trainable=True)

8M_hat = tf.get_variable(name = 'M_hat', initializer=tf.initializers.random_uniform(minval=-2, maxval=2), shape=[in_features, out_dim], trainable=True)

9

10W = tf.nn.tanh(W_hat) * tf.nn.sigmoid(M_hat)

11

12a = tf.matmul(in_dim, W)

13

14return a, W

NAC function in Python

Python 中的 NAC 功能

接下來,讓我們創建一些玩具數據,用于訓練和測試數據。 NumPy 有一個名為 numpy.arrange 的優秀 API,我們將利用它來創建數據集。

1# Generate a series of input number X1 and X2 for training

2x1 = np.arange(0,10000,5, dtype=np.float32)

3x2 = np.arange(5,10005,5, dtype=np.float32)

4

5

6y_train = x1 + x2

7

8x_train = np.column_stack((x1,x2))

9

10print(x_train.shape)

11print(y_train.shape)

12

13# Generate a series of input number X1 and X2 for testing

14x1 = np.arange(1000,2000,8, dtype=np.float32)

15x2 = np.arange(1000,1500,4, dtype= np.float32)

16

17x_test = np.column_stack((x1,x2))

18y_test = x1 + x2

19

20print()

21print(x_test.shape)

22print(y_test.shape)

添加玩具數據

現在,我們可以定義樣板代碼來訓練模型。 我們首先定義占位符 X 和 Y,用以在運行時提供數據。 接下來我們定義的是 NAC 網絡(y_pred,W = NAC(in_dim = X,out_dim = 1))。 對于損失,我們使用 tf.reduce_sum()。 我們將有兩個超參數,alpha,即學習率和我們想要訓練網絡的時期數。在運行訓練循環之前,我們需要定義一個優化器,這樣我們就可以使用 tf.train.AdamOptimizer() 來減少損失。

1# Define the placeholder to feed the value at run time

2X = tf.placeholder(dtype=tf.float32, shape =[None , 2]) # Number of samples x Number of features (number of inputs to be added)

3Y = tf.placeholder(dtype=tf.float32, shape=[None,])

4

5# define the network

6# Here the network contains only one NAC cell (for testing)

7y_pred, W = NAC(in_dim=X, out_dim=1)

8y_pred = tf.squeeze(y_pred)# Remove extra dimensions if any

9

10# Mean Square Error (MSE)

11loss = tf.reduce_mean( (y_pred - Y) **2)

12

13

14# training parameters

15alpha = 0.05 # learning rate

16epochs = 22000

17

18optimize = tf.train.AdamOptimizer(learning_rate=alpha).minimize(loss)

19

20with tf.Session() as sess:

21

22#init = tf.global_variables_initializer()

23cost_history = []

24

25sess.run(tf.global_variables_initializer())

26

27# pre training evaluate

28print("Pre training MSE: ", sess.run (loss, feed_dict={X: x_test, Y:y_test}))

29print()

30for i in range(epochs):

31_, cost = sess.run([optimize, loss ], feed_dict={X:x_train, Y: y_train})

32print("epoch: {}, MSE: {}".format( i,cost) )

33cost_history.append(cost)

34

35# plot the MSE over each iteration

36plt.plot(np.arange(epochs),np.log(cost_history)) # Plot MSE on log scale

37plt.xlabel("Epoch")

38plt.ylabel("MSE")

39plt.show()

40

41print()

42print(W.eval())

43print()

44# post training loss

45print("Post training MSE: ", sess.run(loss, feed_dict={X: x_test, Y: y_test}))

46

47print("Actual sum: ", y_test[0:10])

48print()

49print("Predicted sum: ", sess.run(y_pred[0:10], feed_dict={X: x_test, Y: y_test}))

訓練之后,成本圖的樣子:

NAC 訓練之后的成本

Actual sum: [2000. 2012. 2024. 2036. 2048. 2060. 2072. 2084. 2096. 2108.]Predicted sum: [1999.9021 2011.9015 2023.9009 2035.9004 2047.8997 2059.8992 2071.8984 2083.898 2095.8975 2107.8967]

雖然 NAC 可以處理諸如加法和減法之類的操作,但是它無法處理乘法和除法。 于是,就有了 NALU 的用武之地。它能夠處理更復雜的操作,例如乘法和除法。

通過學習乘法來測試 NALU

為此,我們將添加片段以使 NAC 成為 NALU。

神經累加器(NAC)是其輸入的線性變換。神經算術邏輯單元(NALU)使用兩個帶有綁定的權重的 NACs 來啟用加法或者減法(較小的紫色單元)和乘法/除法(較大的紫色單元),由一個門(橙色單元)來控制。

1# The Neural Arithmetic Logic Unit

2def NALU(in_dim, out_dim):

3

4shape = (int(in_dim.shape[-1]), out_dim)

5epsilon = 1e-7

6

7# NAC

8W_hat = tf.Variable(tf.truncated_normal(shape, stddev=0.02))

9M_hat = tf.Variable(tf.truncated_normal(shape, stddev=0.02))

10G = tf.Variable(tf.truncated_normal(shape, stddev=0.02))

11

12W = tf.tanh(W_hat) * tf.sigmoid(M_hat)

13# Forward propogation

14a = tf.matmul(in_dim, W)

15

16# NALU

17m = tf.exp(tf.matmul(tf.log(tf.abs(in_dim) + epsilon), W))

18g = tf.sigmoid(tf.matmul(in_dim, G))

19y = g * a + (1 - g) * m

20

21return y

Python 中的 NALU 函數

現在,再次創建一些玩具數據,這次我們將進行兩行更改。

1# Test the Network by learning the multiplication

2

3# Generate a series of input number X1 and X2 for training

4x1 = np.arange(0,10000,5, dtype=np.float32)

5x2 = np.arange(5,10005,5, dtype=np.float32)

6

7

8y_train = x1 * x2

9

10x_train = np.column_stack((x1,x2))

11

12print(x_train.shape)

13print(y_train.shape)

14

15# Generate a series of input number X1 and X2 for testing

16x1 = np.arange(1000,2000,8, dtype=np.float32)

17x2 = np.arange(1000,1500,4, dtype= np.float32)

18

19x_test = np.column_stack((x1,x2))

20y_test = x1 * x2

21

22print()

23print(x_test.shape)

24print(y_test.shape)

用于乘法的玩具數據

第 8 行和第 20 行是進行更改的地方,將加法運算符切換為乘法。

現在我們可以訓練的是 NALU 網絡。 我們唯一需要更改的地方是定義 NAC 網絡改成 NALU(y_pred = NALU(in_dim = X,out_dim = 1))。

1# Define the placeholder to feed the value at run time

2X = tf.placeholder(dtype=tf.float32, shape =[None , 2]) # Number of samples x Number of features (number of inputs to be added)

3Y = tf.placeholder(dtype=tf.float32, shape=[None,])

4

5# Define the network

6# Here the network contains only one NAC cell (for testing)

7y_pred = NALU(in_dim=X, out_dim=1)

8y_pred = tf.squeeze(y_pred) # Remove extra dimensions if any

9

10# Mean Square Error (MSE)

11loss = tf.reduce_mean( (y_pred - Y) **2)

12

13

14# training parameters

15alpha = 0.05 # learning rate

16epochs = 22000

17

18optimize = tf.train.AdamOptimizer(learning_rate=alpha).minimize(loss)

19

20with tf.Session() as sess:

21

22#init = tf.global_variables_initializer()

23cost_history = []

24

25sess.run(tf.global_variables_initializer())

26

27# pre training evaluate

28print("Pre training MSE: ", sess.run (loss, feed_dict={X: x_test, Y: y_test}))

29print()

30for i in range(epochs):

31_, cost = sess.run([optimize, loss ], feed_dict={X: x_train, Y: y_train})

32print("epoch: {}, MSE: {}".format( i,cost) )

33cost_history.append(cost)

34

35# Plot the loss over each iteration

36plt.plot(np.arange(epochs),np.log(cost_history)) # Plot MSE on log scale

37plt.xlabel("Epoch")

38plt.ylabel("MSE")

39plt.show()

40

41

42# post training loss

43print("Post training MSE: ", sess.run(loss, feed_dict={X: x_test, Y: y_test}))

44

45print("Actual product: ", y_test[0:10])

46print()

47print("Predicted product: ", sess.run(y_pred[0:10], feed_dict={X: x_test, Y: y_test}))

NALU 訓練后的成本

Actual product: [1000000. 1012032. 1024128. 1036288. 1048512. 1060800. 1073152. 1085568. 1098048. 1110592.]Predicted product: [1000000.2 1012032. 1024127.56 1036288.6 1048512.06 1060800.8 1073151.6 1085567.6 1098047.6 1110592.8 ]

在 TensorFlow 中全面實現

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4771

    瀏覽量

    100720
  • 深度學習
    +關注

    關注

    73

    文章

    5500

    瀏覽量

    121118

原文標題:想理解神經算術邏輯單元嗎?

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    數字電路中加法器和減法器邏輯圖分析

    多位二進制減法器,是由加法電路構成的;在加法電路的基礎上,減法加法采用同一套電路,實現加減法
    發表于 09-01 16:02 ?2.3w次閱讀
    數字電路中<b class='flag-5'>加法</b>器和<b class='flag-5'>減法</b>器邏輯圖分析

    減法器電路與原理 減法器電路圖分享

    減法器是一種電路,它可以實現二進制數字的減法運算。減法器的工作原理基于位運算和進位/借位機制。
    的頭像 發表于 02-19 09:36 ?8113次閱讀
    <b class='flag-5'>減法</b>器電路與原理 <b class='flag-5'>減法</b>器電路圖分享

    4位帶進位的加法+減法計算器

    前段時間動手做了個小項目,跟大家分享一下!可實現4位帶進位加法/減法計算。目前負值無法顯示,只顯示負數絕對值。對實例1中的顯示部分有優化。目前已實現計算器功能,但程序有待優化。遙控板測試說明(紅外):—:表示減法+: 表示
    發表于 01-20 17:15

    LUT用作加法器或減法

    嗨,我正在盡可能使用壓縮邏輯來執行加法減法。我有兩個8位數據,我想有時添加或有時減去這兩個數字。看起來像是Elelment有一個叫做“CYINIT”的輸入,根據的值,它可以執行
    發表于 03-28 06:07

    減法運算

    減法運算   同加法運算一樣,減法運算可采用減法器來實現。半減器和全減器的設計方法和步驟與設計加法器相同。實用上,為了簡化系統結構,通常不
    發表于 04-07 10:38 ?1.3w次閱讀
    <b class='flag-5'>減法</b>運算

    十進制加法器,十進制加法工作原理是什么?

    十進制加法器,十進制加法工作原理是什么?   十進制加法器可由BCD碼(二-十進制碼)來設計,它可以在二進制加法器的基礎上加上適當的“
    發表于 04-13 10:58 ?1.4w次閱讀

    本的二進制加法/減法器,本的二進制加法/減法器原理

    本的二進制加法/減法器,本的二進制加法/減法器原理   兩個二進制數字Ai,Bi和一個進位輸入Ci相加,產生一個和輸出Si,以及一個進位
    發表于 04-13 11:11 ?5271次閱讀

    補碼減法,補碼減法原理是什么?

    補碼減法,補碼減法原理是什么?    負數的減法運算也要設法化為加法來做,其所以使用這種方法而不使用直接減法,是因為它可以和常規的
    發表于 04-13 11:45 ?6828次閱讀

    8位加法器和減法器設計實習報告

    8位加法器和減法器設計實習報告
    發表于 09-04 14:53 ?134次下載

    加法器與減法器_反相加法器與同相加法

    加法器是產生數的和的裝置。加數和被加數為輸入,和數與進位為輸出的裝置為半加器。減法電路是基本集成運放電路的一種,減法電路可以由反相加法電路構成,也可以由差分電路構成。基本集成運放電路有
    發表于 08-16 11:09 ?16.7w次閱讀
    <b class='flag-5'>加法</b>器與<b class='flag-5'>減法</b>器_反相<b class='flag-5'>加法</b>器與同相<b class='flag-5'>加法</b>器

    加法減法運算電路性能特點及值計算方法

    4.1.3加法減法運算電路
    的頭像 發表于 04-18 06:03 ?1.6w次閱讀
    <b class='flag-5'>加法</b>和<b class='flag-5'>減法</b>運算電路性能特點及值計算方法

    指針的加法操作

    指針的加法操作我們見過很多,但是減法操作遇到的好像很少。
    的頭像 發表于 03-29 10:12 ?614次閱讀

    fpga實現加法減法運算的方法是什么

    FPGA實現加法減法運算非常簡單,實現乘法和除法可以用IP,那實現對數和指數運算該用什么呢?
    發表于 08-05 09:37 ?1455次閱讀
    fpga實現<b class='flag-5'>加法</b>和<b class='flag-5'>減法</b>運算的方法是什么

    什么是串擾?該如何處理

    什么是串擾?該如何處理
    的頭像 發表于 12-05 16:39 ?845次閱讀
    什么是串擾?該如<b class='flag-5'>何處理</b><b class='flag-5'>它</b>?

    PLC的工作原理、組成以及應用

    和監控。本文將詳細介紹PLC的工作原理、組成以及應用。 一、PLC的工作原理 輸入處理 PLC的輸入處理是指將外部信號(如傳感器信號、開關信
    的頭像 發表于 07-01 09:38 ?3937次閱讀
    主站蜘蛛池模板: 亚洲午夜性春猛交XXXX| 亚洲AV永久无码精品澳门| 色噜噜噜噜亚洲第一| 天堂网久久| 亚洲人成人毛片无遮挡| 中国成人在线视频| jiucao在线观看精品| 疯狂做受XXXX高潮欧美日本| 国产精品乱码一区二区三 | 在线免费视频国产| AV国产乱码一区二区三视频| 俄罗斯人与动ZOZ0| 亚洲综合小说久久另类区| 久久亚洲精品无码A片大香大香| 你是淫荡的我的女王| 熟女人妻久久精品AV天堂| 亚洲乱码高清午夜理论电影| 综合色一色综合久久网vr| 草草色| 国内精品久久影视免费| 猫咪www958ii| 视频一区亚洲中文字幕| 夜夜穞狠狠穞| 把手戳进美女尿口里动态图| 狠狠鲁快播| 欧美日韩亚洲中字二区| 亚洲 欧美 中文 日韩 视频| 最新亚洲中文字幕在线观看| 第一次破女视频出血视频| 久久ZYZ资源站无码中文动漫| 欧美午夜精品久久久久久浪潮 | 欧洲日韩av无线在码| 亚洲国产在线精品国偷产拍| 1V1各种PLAY女主被肉| 欧美の无码国产の无码影院| 偷窥欧美wc经典tv| 18日本人XXXXXX18| 国产午夜AV无码无片久久96| 欧美成人中文字幕在线看| 亚洲精品福利一区二区在线观看| 99re在线播放|