AI 模型是什麼,什麼是建模 先講我個人的結論: 模型:是應用過往的資料,預測未來尚未發生的或是不存在的事情 建模:則是利用很多大師提出已被驗證過的演算法以及被驗證過的各種神經網路堆疊架構去組合出的一個能解決問題的框架(函數-我其實不太想說函數,免得又複雜的讓人卻步)   我們去看從簡單的Regression、Logistic Regression、SVM、randomForest、lightgbm、XGBoost,一直到複雜的LSTM、GAN、BERT...,這些偉大的模型,真的才是稱的上數據科學家的人,共同發展出來的框架   對於我們一般企業來說,如何用這些既定的模型,如何調參或者拆掉某一些層再訓練,又或者是模型再串模型(machine learning中的pipeline),這對企業單位的應用可以說是比較實際的問題 ,因為我們不可能像google這樣的公司擁有全世界的龐大資料,也不太可能像google、IBM等公司有用不完的運算資源以及AI科學家(這些人其實太頂尖,也不是真的很多)   我的另一個看法是目前較成熟的AI,主要還是針對一些特定的問題 ,例如:二分類、多分類、影像辦識、語音辨識,而通常解決多分類的模型不太可能解決語音辨識的問題, 很多的問題(我的問題是猜大樂透下期會出那些號碼似乎還沒有好的模型啊:))其實都是用問題去找模型 ,這世界上模型愈來愈多,有沒有一種模型是當我輸入問題,模型就可以告訴我最適合的模型是什麼,並且可以自動調參,據說有人在做這檔事   我只是把走了這麼大一圈的路才得出的結論分享給大家,當然這一圈也沒白走,希望更多的人參與,才會有進步   kaggle上有很多的問題及範例,當大家有這些概念後,可以去看看,我常看有些人為了學AI,學了很深的網路爬文技巧,如果你是要預測股價,或許ok,但是要理解一下 特徵工程 做法,如果不是可以先從kaggle裡面有沒有跟你類似的問題,大家在上面提供的solution作法,這樣學起來比較快 有空的時候可以看一下古典統計、線性代數、導數、偏微分或者上上台大李宏毅教授的線上課程,時不時補充一下數理概念會更好   另外對資料庫概念最好要有摸過,知道什麼是key值,什麼是group by,什麼是join   所謂好的模型,其實就是了...

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])

 

 

待續~~


 



 



留言

這個網誌中的熱門文章

#AI #python 在公司應用的心得(二):#心態 很重要

#AI #python 在公司應用的心得(一):AI 大概念