1. 程式人生 > >深度學習筆記—什麼是神經網路與TensorFlow實現神經網路?

深度學習筆記—什麼是神經網路與TensorFlow實現神經網路?

學習目錄:

  • (python自然語言處理實戰-核心技術與演算法書籍《塗銘 劉詳 劉樹春》)—推薦
  • (吳恩達-深度學習)[http://mooc.study.163.com/smartSpec/detail/1001319001.htm]—推薦
  • (莫煩系列-深度學習與機器學習)[https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/]
  • (麥子學院-深度學習)[https://www.bilibili.com/video/av15200856/]
  • (中文網)(http://www.tensorfly.cn/) (英文網)[https://www.tensorflow.org/]—推薦
  • (煉數成金-深度學習框架Tensorflow學習與應用)[https://www.bilibili.com/video/av20542427/]

總結深度學習的筆記,如果寫的不對請評論指出、我會修改。 

你將學到:

  • 1、大白話理解什麼是神經網路?
  • 2、TensorFlow實現神經網路?

1、什麼是神經網路?

         它就是一個數學函式:有輸入、輸出、計算邏輯(節點)。

                                  

        把房屋的面積作為神經網路的輸入(我們稱之為x ),通過一個節點(一個小圓圈),最終輸出了價格(我們用y 表示)。這個函式被稱作ReLU

啟用函式,它的全稱是Rectified Linear Unit。rectify可以理解成max(0,x)

但這個函式太簡單了,往往現實沒那麼簡單,比如房價的高低是有很多因素影響的:如位置、房間面積等等。

                                      

在圖上每一個畫的小圓圈都可以是ReLU(啟用函式)的一部分,也就是指修正線性單元,或者其它稍微非線性的函式。

這裡有四個輸入的神經網路,這輸入的特徵可能是房屋的大小、臥室的數量、郵政編碼和區域的富裕程度。給出這些輸入的特徵之後,神經網路的工作就是預測對應的價格。同時也注意到這些被叫做隱藏單元圓圈。

神經網路理解為:

是一個多輸入、多個節點(計算邏輯)、一個輸出的函式。

2、TensorFlow 實現神經網路

  •   TensorFlow  實現簡單例子(還不瞭解它的可以去官網看看):
# 定義兩個常量
a = tf.constant(10)
b = tf.constant(32)
# 相加
s = tf.add(a,b)
# s= sess.run(a + b)
# 輸出
print("兩個數相加:",s)

  控制檯輸出:(tensor是TensorFlow用來表示資料的,這不是我們想要的結果)

兩個數相加: Tensor("Add:0", shape=(), dtype=int32)
# 啟動TensorFlow預設的圖
sess = tf.Session()
s = sess.run(s)
print("兩個數相加:",s)

  控制檯輸出:

兩個數相加: 42
  • 實現簡單的神經網
import numpy as np
import tensorflow as tf


# 定義引數w,在TensorFlow中,你要用tf.Variable()來定義引數
w = tf.Variable(0,dtype = tf.float32)

# 定義損失函式(就是一個函式,別想那麼複雜):
cost = w**2-10*w+25  # tensorflow 也能識別
# cost = tf.add(tf.add(w**2,tf.multiply(- 10.,w)),25)
# 定義損失函式:(讓我們用0.01的學習率,目標是最小化損失)
train = tf.train.GradientDescentOptimizer(0.01).minimize(cost)

# 開啟了一個TensorFlow session。
session = tf.Session()

# 用來初始化全域性變數。
init = tf.global_variables_initializer()
session.run(init)

# 定義train為學習演算法,它用梯度下降法優化器使損失函式最小化,但實際上我們還沒有執行學習演算法,所以session.run(w)評估了w等於0
print(session.run(w))

# 運行了梯度下降的1000次迭代,最後w變成了4.99999(4.9999886),記不記得我們說〖(w-5)〗^2最小化,因此w的最優值是5,這個結果已經很接近了
for _ in range(10000):
    session.run(train)
print(session.run(w))

  控制檯輸出(訓練10000,結果接近於5了,這就是我們想要的結果):

0.0
4.9999886