第五周2021/3/21

課堂小考

  • Adam:常用的優化算法,結合了 動量 和自適應學習率的特性。它可以幫助神經網絡更快地收斂到最優解,從而提高模型的預測性能。

  • Dropout:正則化技術,隨機地將神經元的輸出置為零來防止過度擬合。這可以幫助減少模型對訓練數據的過度依賴,從而提高對新數據的泛化能力。

  • Parameter Norm Penalties:參數範數懲罰是通過向損失函數 添加參數 的正則化項來控制模型的複雜度。這可以防止模型對訓練數據過度擬合,從而改善對目標變量的預測。

  • Dataset Augmentation:(數據增強) 對訓練數據進行隨機變換來生成額外的訓練樣本。 這可以幫助模型更好地捕捉數據的不變性,從而提高對目標變量的預測性能。

優化器

  1. 適合大型數據? 具有 自適應學習率特性
  • Adam:
  • Adagrad:
  • SGD:
  • RMSprop:

第四周2021/3/14

第三周2021/3/7

image

image

image

第二周2024/2/29

from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Input from tensorflow.keras import Model import numpy as np import keras from keras.utils import to_categorical import matplotlib.pyplot as plt (x_train, y_train),(x_test, y_test)=keras.datasets.mnist.load_data() x_train=x_train/255 #正規化 讓資料介於0-1之間 x_test=x_test/255 x_train=x_train.reshape((60000,784,))#輸入 y_train_label=to_categorical(y_train)#輸出 x_test=x_test.reshape((10000,784,))#輸入 y_test_label=to_categorical(y_train)#輸出 #換成28*28的手寫文字辨識 # Create a Sequential model: method 1 inputs = Input(shape=(784,)) hidden=Dense(10, activation = "relu")(inputs) outputs = Dense(10, activation = "softmax" )(hidden) model = Model(inputs, outputs) #Ready to train model.compile( optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"] ) history= model.fit(x=x_train, y=y_train_label, validation_data=[x_test,y_test] ,epochs=1000, verbose=2)#驗證資料validation_data import matplotlib.pyplot as plt plt.plot(history.history['loss']) plt.title('model loss') plt.ylabel('Loss') plt.xlabel('epoch') plt.legend(['train'], loc='upper left') plt.show()

<<成為python ai 深度學習達人的第一門課>>

第十六周 2023/12/28

考試重點:冒險19 20 21 23 24 25 26 27 28 35 39

  1. RNN的特性 原理
  2. LSTM的模型 包含數學模型 GRU模型
  3. 文字轉數字 用甚麼方法 如何存檔 自然語言處理NCP 如何生成?編碼?解碼?區分不同的相似字?attention模型 數學式 冒險20 21
  4. GAN的原理 方法?
  5. 強化學習的原理 方法? 冒險35 生成對抗網路GAN : Generative Adverserial Nets
  6. 自己訓練自己
  7. 定義 一個生成器模型+鑑別器模型

冒險39 強化學習

  1. 著名的例子:AlphaGO圍棋
  2. Deep Q-Learning

第十五周 2023/12/21

老師公假

第十四周 2023/12/14

ch3 回歸

  1. RNN模型:輸入第一個字、產生一個隱藏狀態h1,和第二個字一起傳到模型,產生第二個隱藏狀態h2,依此類推,直到說出最後一個字產生最後的hT,稱為C(是前面所有字的融合) 特徵表現向量
  2. 接收使用者說的話: 編碼器encoder 把使用者說的話濃縮成一個特徵表現向量C
  3. 對話機器人的回應: 解碼器decoder 輸入特徵表現向量 輸出要回應的話
  4. 輸入使用者對話->編碼器->C->解碼器->輸出回應
  5. 隱藏狀態RNN的記憶 是特定時間點的特徵表現向量
  6. 用解碼器生成文字時只有第一次看到完整的輸入特徵表現向量,越後面越不清楚,因此,要在解碼器生成文字階段時每一次都考慮到 輸入總結表現向量C

第十三周 2023/12/7

人智展 公假

image

第十二周 2023/11/30

  1. 如何輸入文字?依出現的頻率由高到低 編號 越常出現的字數字越小(訊息理論) : Tokenizer套件
  2. 將數字變成向量:one-hot encoding ex. 的(2) =>[010000000000] 資料集有一萬筆 就會變成一萬維的向量
  3. 讀入RNN套件:import sequence:整理要送進去的文字資料 import Sequential打造模型
  4. RNN的隱藏層 LSTM
  5. IMDb網路電影資料數據庫

第十一周 2023/11/23 :100:

冒險19 RNN迴歸式類神經網路

  1. 具有學習(判斷本次輸入是否是新的)、記憶性(將本次輸入作為下次的輸入)

第十周 2023/11/16

使用別人訓練好的模型:ResNet50

step1.下載

  1. wget下載網址中的檔案到colab背後的虛擬機中,命名為Cooper.zip
  2. !wget --no -check-certificate\https::/Cooper.zip\- 0 /content/Cooper.zip -0 放在哪、檔名
  3. wget 檔案的URL -0 儲存位址/檔名

step2.解壓縮

  1. import zipfile 解壓縮成6張圖片檔+標籤的文字檔'imagenet-classes.txt'
  2. 將jpg檔的路徑存成一個list 稱為cooper: cooper=[f"cooper0{i}.jpg" for i in range(1,7)]
  3. 讀入標籤名稱
    ​​​​with open('imagenet-classes.txt') as f: ​​​​ labels=[line.strip() for line in f.readlines()]

step3.讀模型 7. model=ResNet50() 8. 輸入模型前要調整圖片大小,改成2242243channels 9. x=img_to_array(img).reshape(1,224,224,3) 一次改一張圖片

用ResNet50V2做模型 用遷移式學習 判斷 少量資料集

第九周 2023/11/9

期中考

第八周 2023/11/2

  1. image.png

第七周 2023/10/26

  1. CNN捲積神經網路:捲積層、池化層
  2. 抓特徵
  3. Filter濾波器:NxN的矩陣,將權重作加權和(內積 點對點相乘) 抽取特徵
  4. fliter是個記分板:紀錄特徵強度、權重是訓練出來的
  5. 左到右上至下 跑過一次 得到n-2 X n-2 大小的記分板 稱為捲積運算convolution
  6. 不完全連結的特性:只需要輸入9個數字就能得到=計分板上的每個值,3x3=9個權重得到一個記分板
  7. 用更少的權重得到同樣的輸出高度
  8. 避免遺漏邊界的特徵=補0 padding
  9. padding='same' 讓記分板跟原圖同大小
  10. 決定用多少fliter、fliter的尺寸
  11. pooling池化層:降低資料量並保持特性 把大資料切小塊並以代表性的數字代表每一區塊
  12. 池化層大小2x2: 把記分板切割 為 一個一個2x2的小區塊組成
  13. (捲積+池化)x好幾組 再加全連結層

第六周 2023/10/19

pip install fastapi pip install kaleido 用gradio執行準備好的模型進行預測:

  1. !pip install gradio
  2. 讀入模型load_model
  3. 用gradio決定輸入輸出;輸入一張圖片 模型判斷 輸出結果
  4. prediction.shape Out:(1,10) 意思是1筆資料 每筆資料是10維度的向量
  5. flatten() 拉平
  6. 用 ==gr.Interface()== 打造web App,再上架 iface.launch()

第五周 2023/10/12

  1. MINST 資料集:手寫數字 28*28灰階圖檔 -> 拉直成784維的向量

step:

  1. model=Sequential 打造空白的神經網路
  2. 決定:隱藏層數量?每層要幾個神經元?
  3. model.add 模型內網路的架構,加入隱藏層
  4. Dense(100,input_dim=輸入多少神經元,activation='relu') 全連接層/用100個神經元/輸入784(只有第一層需要)/激活函數relu
  5. model.add(Dense(100,input_dim=輸入多少神經元,activation='relu)//第一層
  6. model.add(Dense(100,activation='relu'))//再加第二層 依序
  7. model.add(Dense(10,avtivation='softmax'))//最後一層是輸出層 10輸出的數量 softmax讓輸出加總為1
  8. model.compile 用compile組裝、告知 損失函數 選擇優化學習的方法(ex梯度下降法)
  9. model.compile(loss='mse',optimizer=SGD(learning_rate=0.087),metrics=['accuracy'])均方差mse 梯度下降法S(隨機:不照順序一個個訓練)GD
  10. metrics=['accuracy'] 隨時看到目前的正確率
  11. model.summary() 看模型架構

第四周 2023/10/5

  1. 非線性:(曲線)斜率會變動
  2. 線性:斜率固定 :small_red_triangle:Y/ :small_red_triangle:X
  3. 三個input,以權重W決定不同input的重要性:

sigma i=1~n Wi*Xi 加權和

  1. 用偏值(bias)調整加權和: sigma i=1~n Wi*Xi +B
  2. 權重、偏值 都是經過學習得到的
  3. 得到的是線性函數 -> 再 用非線性的函數 將它 轉換成非線性
  4. 激發函數activation function 非線性
    • ReLU: if( x>=0 ) x=x ; else x=0; X比零小時為零
    • sigmoid
    • tanh

隱藏層的選擇:DNN / RNN(有記憶) / CNN(捲機 圖形)

DNN(dense natural networks)全連結神經網路

決定要幾個隱藏層、每個隱藏層要幾個神經元 每一層的神經元會輸出到下一層所有神經元

  1. 給 權重、偏值 再放入任何輸入,就決定了輸出是甚麼 > 初始化 設定參數起始值 (隨機給的)
  2. 損失函數loss function : L( ) 觀察神經網路與正確答案相差多少
  3. 找到使L(sita)最小的sita
  4. yi = f(yi) 對神經網路( f sita( ) ) 輸入xi得到yi
  5. 計算誤差:yi` - yi (可想成m為 空間中的兩點距離 )

| | yi-yi` || = 開根號{ (a1-b1)^2 + (a2-b2)^2 }

  1. 平方去掉開根號,再 把所有誤差加起來再平均 均方誤差 MSE(Mean Squared Error)

第三周 2023/9/28

事假(嘉義旅遊)

第二周 2023/9/21

  1. !nvidia-smi -L "!"表示直接在colab notebook中執行系統指令,看GPU

    小黑視窗中就不用"!"了

  2. ls檔案路徑

  3. from ipywidgets import interact_manual 互動方式:interact_manual(輸入資料後、按鍵互動) interact(即時互動)

  4. 每一種資料型態對應一種互動方式 ex.輸入數字int vs. string

  5. pip install gradio import gradio as grGradoi 輸出用return回傳

    vs.

  6. Web App:用Gradio創造互動介面 iface 不用範例, 直接說明輸入輸出是甚麼

    launch 上架

  7. 公開iface.launch(share=True)

  8. row - row - row列

  9. column行

  10. column

  11. np.shape(col行數量,row列數量)純量:

    4筆資料、每筆資料有一個數值

  12. 向量:y.shape()=(2,4)兩筆資料、每筆資料有4個數值

  13. 在變形前先預覽(不改動原本的值np.reshape(x,y)

第一周 2023/9/14

  1. colab google線上、雲端硬碟的編譯器(.ipynb),可放github
  2. https://colab.research.google.com/drive/1bhfv90Uup3on-ma6JjqohksFyx6JV-z-?hl=zh-tw#scrollTo=6UxU2H5zcVbe