發表文章

目前顯示的是有「keras」標籤的文章

[Keras筆記]用ImageDataGenerator訓練大型資料集需要注意的幾件事

圖片
以前訓練小資料集都是用model.fit(X,Y) 評估訓練過後的模型用model.evaluate(...) 測試單張圖片則是用model.predict(image) 而因為以前學的時候,只是用小型資料集做練習,所以我們使用的標籤都會是自己定義的indices 現在常會接觸到大型資料集,所以訓練方法會變成: 訓練模型的時候用model.fit_generator() 評估模型的時候用scores = model.evaluate_generator() #這個會回傳一個list,像這邊score是一個list,會有兩個數字,第一個數字我記得是代表loss,第二個數字是準確度,範圍在0~1.0之間,所以要再自己準換成百分比。 evaluate_generator()就是由照片所屬的資料夾名稱下去推斷照片預測的是不是屬於正確的類別,也就是有正確答案作為參考,所以才算得出準確度來(scores[1])。 用模型去做批次照片的預測機率用scores = model.predict_generator() #假如有10個資料夾(分10類),每個資料夾有3張照片要做測試,則scores就是一個[30, 10]的array型態。 而要用訓練完的模型去做「單張」照片的預測,有兩種方法可以使用: (1) model.predict(image) #會回傳一個numpy array,每個數值代表預測出每個類別的機率。 (2) model.predict_classes(image) #會回傳預測出機率最高的類別「索引」。 這裡就有趣了,這邊的每個類別的機率分佈跟「索引」代表的是「generator.class_indices」所推斷出來的索引,而不是按照檔案總管裡面資料夾的排序當作索引。 我會發現這個問題是因為我在交叉使用model.predict_generator()跟model.predict()時,機率的分佈跟預測出來的類別有很大的不一樣,一開始還以為是訓練出問題,原來只是generator推斷的類別索引順序跟我想的不一樣,或是說以前用model.predict()的概念不同罷了(汗... 解決辦法: 參考網路上別人的發問,要使用model.predict_classes()找出測試的對應類別機率和預測的類別,只要做個dictionary做簡單的轉換就好。 [標籤轉換]ht...

[課程筆記] Introduction to TensorFlow for Artificial Intelligence, Machine Learning, and Deep Learning - Coursera

圖片
常在用keras搭模型,很常會看到這樣的寫法: 簡單來說,步驟就是: 1.定義模型架構   (在keras可以是Sequential或Functional) 2.編譯模型  ( model.compile(...) ) 3.有一筆整理過後的data與label  (xs, ys。視你的問題,給定什麼樣型態的資料) 4.訓練模型  (  model.fit(...) ) 要用比較直觀的方式來描述上面整件事,我認為講師 Laurence的說法值得我學習。 他是這麼解釋的: 1.因為model不知道data和label的關係,所以.. 2.先讓model試著猜出一個xs跟ys的對應函數(e.g. y = 10x - 1) 3.根據猜測的結果,用loss function來衡量model猜測的結果是好或壞 4.把loss function得到的資訊交給optimizer來找出下一輪的猜測,而這個猜測的原則是下一輪的猜測要比前一次的還要好(e.g. 可能猜y = 5x - 1、y = 3x - 1之類的 ) 5.根據epochs次數,重複做1. ~ 4.的猜測嘗試 以下是幾個簡單的問答參考: