- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
AI-PYTHON-TENSORFLOW-keras 需了解的基礎概念(一)
1)均方誤差的原理及算法-MSE(mean squared error)
上面是再找一條最佳解直線,但觀察點要多
最佳化方法的方法在不同樣本量,會有不同做法
暴力搜尋
樣本數量多,維度很大就不行,我們可以想像大海撈針
2)梯度下降法
利用微分中的求導數概念,將各點的導數結果連接起來,會形成導函數(函數的定義必須是連續性)
3) 在Tensorflow 中,目前的版本為2.x,Eager Execution模式一旦執行就會返回數值。以往的版本1.x,必須在腦中要有執行的藍圖,中間建構的層,無法及時看到結果,之前的版本不清楚沒關係,只要有學過machine learning,大概就能具備進入TF2.X的能力了
4)在tensorflow的模式及numpy模式下,雖然都是多維,資料必須為TENSOR的物件,才能運算,可以使用type()查看物件的type,確定物件是否同type,但同維的Tensor 與numpy 例外:2D Tensor 的運算,在Eager Execution模式下可以混和 Tensor 和 numpy 做運算,其結果為何,仍然為tensor的格式,3維numpy也可以跟3維TENSOR作運算
5)在tensor中算Gradient的方式,是使用GradientTape()建立一個反向偏微分的值,Tape意思就是一個記錄器
6)Tensor在早期有keras(約莫2014-2015年出現,是一位google工程師為了簡化對Tensor難懂的應用方式進行的一種介面開發,其實底層還是使用tensor或是更低階的tensor函數,同時支持Tiano)獨立的Library,在Tensor 2.x中已經整在tf底下,正式成為一個高階的函數庫(API),所以可以用tf.keras....進行引用
7) tf.Keras下建立網路模型有二種方式,分別為序列型(Sequential Model)以及函數型(Function Model),這部分有本書叫做google大神...,裡面清晰易懂,不管如何,以下有幾個重點關於模型必須具有的觀念
層的意義:我們是用一個一個的層來搭建神經網路的,第一層通常為輸入層,最後為輸出層,中間(統稱隱藏層)隨備要放多少層都可以,但要看是否有意義及效能考量,中間層的每一個存放變數的節點通常伴隨bias(偏值)以及啟動函數,現在的神經網路精髓都在中間這個隱藏層,不要懷疑,各種模型都在這裡面變來變去
1.Dense:全連接層
2.Conv2d:捲積用的層
3.Flatten:平攤層
4.Add:層與層相加
5.啟動函數:Sigmoid、Relu、tanh
以一個要解決的分類問題來看:最經典的手寫問題0-9來看
mnist = tf.keras.datasets.mnist #載入mnist經典的數據,這邊想一下可以如何放在公司解決其他問題用
#序列型
model = keras.Sequential(name='Sequential')
model.add(layers.Dense(64, activation='relu', input_shape=(784,))) #28*28的圖檔flatten後會形成784
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
plot_model(model, to_file='S_Model.png')
下面是所謂網路模型,透過圖形了解所建構的圖型會是什麼樣子,也就是你所建構的神經網路是不是跟你想的一樣
#函數型寫法
inputs = keras.Input(shape=(784,), name='Input')
hidden1 = layers.Dense(64, activation='relu', name='hidden1')(inputs)
hidden2 = layers.Dense(64, activation='relu', name='hidden2')(hidden1)
outputs = layers.Dense(10, activation='softmax', name='Output')(hidden2)
model = keras.Model(inputs=inputs, outputs=outputs) #注意各層name在建立的時候重覆,不會有錯,但在build Model的時候,會報錯
從輸入輸出的角度來看(先不看隱藏層的複雜世界,我很佩服設計各種隱藏層結構的人可以想出各種排列組合),很像資料庫的關聯資料庫概念,資料庫有1對1、1對多、多對1、多對多,同樣的要用keras的時候,也可以有這種對應組合
如果1(輸入)對1或1對多(輸出)還好,但在多對1或是多對多時,一定要用函數型,所以要學就學一個函數型寫法就好
建一個多對多的keras寫法
多對多的寫法,通常應用於多場景輸入,例如:輸入:會員資料、檔期屬性資料、檔期商品資料,輸出:會員資料,平均客單價
image_inputs = keras.Input(shape=(56, 56, 1), name='Image_Input')
hidden1 = layers.Conv2D(64, kernel_size=3, activation='relu', name='hidden1')(image_inputs)
hidden2 = layers.Conv2D(64, kernel_size=3, strides=2, activation='relu', name='hidden2')(hidden1)
hidden3 = layers.Conv2D(64, kernel_size=3, strides=2, activation='relu', name='hidden3')(hidden2)
flatten = layers.Flatten()(hidden3)
info_inputs = keras.Input(shape=(10, ), name='Info_Input')
hidden4 = layers.Dense(64)(info_inputs)
concat = layers.Concatenate()([flatten, hidden4])
weather_outputs = layers.Dense(1, name='Output1')(concat)
temp_outputs = layers.Dense(1, name='Output2')(concat)
humidity_outputs = layers.Dense(1, name='Output3')(concat)
model = keras.Model(inputs=[image_inputs, info_inputs],
outputs=[weather_outputs, temp_outputs, humidity_outputs])
待續~~
留言
張貼留言