24_動手實現TensorFlow--線性變換Linear_Transform

24_動手實現TensorFlow--線性變換Linear_Transform

1 人贊了文章

經過上一節課的完善,我們的MiniFlow已經可以像神經網路一樣接受輸入數據,產生輸出數據了。但是神經網路還有一個重要特徵就是可以通過訓練逐漸提升精度。但我們只有一個Add節點,這是無法提升精度的。為了達到提升精度的目的,我們引入一個比Add節點更有用的節點類型:線性節點。

線性節點

在「神經網路」章節中我們曾經提到過,一個簡單的神經網路依賴於:

  • 輸入input x(向量)
  • 權重weight w(向量)
  • 偏置bias b(常量)

O是輸出。 這是最簡單的線性節點,我們知道神經網路是可以通過反向傳播更新權重值的,當前我們先不進行處理。

class Linear(Node): def __init__(self, inputs, weights, bias): Node.__init__(self, [inputs, weights, bias]) # NOTE: The weights and bias properties here are not # numbers, but rather references to other nodes. # The weight and bias values are stored within the # respective nodes. def forward(self): """ Set self.value to the value of the linear function output. Your code goes here! """ v = 0 for i in range(len(self.inbound_nodes[0].value)): v += self.inbound_nodes[0].value[i]*self.inbound_nodes[1].value[i] self.value = v + self.inbound_nodes[2].value pass

線性變換

線性代數很好地反映了在圖中層之間轉換數值的想法。 事實上,變換的概念正是層應該做的 -- 它將輸入轉換為多維的輸出。 請注意層之間的連接:

由於權重、輸入經常是矩陣形式,所以我們的Linear函數也應該可以處理矩陣運算:

class Linear(Node): def __init__(self, X, W, b): # Notice the ordering of the input nodes passed to the # Node constructor. Node.__init__(self, [X, W, b]) def forward(self): """ Set the value of this node to the linear transform output. Your code goes here! """ inputs = self.inbound_nodes[0].value weights = self.inbound_nodes[1].value bias = self.inbound_nodes[2].value self.value = 0 self.value += np.dot(inputs, weights)+bias

在這裡我們用了numpy的點乘dot()以及numpy的矩陣相加,感興趣的小夥伴請參考numpy的文檔

傳入數據

在nn.py中我們傳入數據到miniflow:

mport numpy as npfrom miniflow import *X, W, b = Input(), Input(), Input()f = Linear(X, W, b)X_ = np.array([[-1., -2.], [-1, -2]])W_ = np.array([[2., -3], [2., -3]])b_ = np.array([-3., -5])feed_dict = {X: X_, W: W_, b: b_}graph = topological_sort(feed_dict)output = forward_pass(f, graph)"""Output should be:[[-9., 4.],[-9., 4.]]"""print(output)

完整代碼鏈接詳見github:

https://github.com/vvchenvv/Self_Driving_Tutorial/tree/master/Class1/24_Linear_Transform?

github.com

人工智慧 歸檔 | 思考與積累?

weiweizhao.com


推薦閱讀:

TAG:TensorFlow | 深度學習DeepLearning | 科技 |