[問題] TensorFlow如何設定複雜的loss function?

看板Python作者 (河豚)時間6年前 (2019/02/01 05:02), 6年前編輯推噓2(207)
留言9則, 3人參與, 6年前最新討論串1/2 (看更多)
各位大家好,小弟最近想用TensorFlow來完成NN的部分 目前數據都準備好了,TensorFlow的部分則是上網查了一些資料,層及進出都設定好了 只是我遇到一個關於loss function的問題 一般訓練都是N個數據進去,M個數據出來,用這M個數據與參考值求誤差 但我的狀況是: 我有一個三維的資料: N x M x P 裡面有 N 個images,每個images有 M 個原子,每個原子有 P 個參數 希望可以利用同一個 (或者依照原子不同而分類成多個) NN 在我輸入P個數據後,可以得到答案Ep 同一個image裡面所有原子M的Ep加總後會得到一個值 En 全部資料會有N個En,這些En與參考值求誤差後即為我的loss 目前卡在不知道該如何將M次計算後的Ep全部加總在一起 ------------------------------------------------------------------------------ 如果也可以描述成: 我每次都丟一組數據 P 進到NN裡面,完成計算後我會得到 N x M 組答案 Ep 我的loss function是將 第0-5個Ep加總在一起 與 參考值1 相減後取平方 將 第6-20個Ep加總在一起 與 參考值2 相減後取平方 最後將所有數據取平均 (初期可以假設每組Ep都是相等數量,但還是會面臨到加總的問題) 不知到是否有前輩們知道該如何解決呢? 謝謝Q____Q -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 45.3.74.48 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1548968533.A.407.html

02/01 08:15, 6年前 , 1F
數學式寫出來阿
02/01 08:15, 1F
假設系統有2個images, n1 及 n2 n1 包含3個原子 m1_1 m1_2 m1_3 分別是種類 s1 s1 s2,n1的能量是E1 n2 包含3個原子 m2_1 m2_2 m2_3 分別是種類 s1 s2 s2,n2的能量是E2 將所有s1原子放入NN1,可以得到三組Output E1_1 E1_2 E2_1 (假設NN1是 2 x 15 x 1 的NN) (一個隱藏層) (每個s1都有2個參數) 將所有s2原子放入NN2,可以得到三組Output E1_3 E2_2 E2_3 (假設NN2是 8 x 15 x 1 的NN) (一個隱藏層) (每個s2都有8個參數) loss function = [(E1_1 + E1_2 + E1_3 - E1)^2 + (E2_1 + E2_2 + E2_3 - E2)^2]/2 或者 loss function = average( (sum(En_:) - En)^2 ) n = n1 n2 n3 ...... ------------------------------------------------------------------------------ 未來如果可能的話希望能把NN1改成 2 x 15 x 3 出來的3個數據(a1 a2 a3)與第一層的2個數據(b1 b2)進行複雜的計算 先假設為: E1_1 = (a1*b1+a2**b2)/a3 E1_2 = (a1*b1+a2**b2)/a3 E1_3 = 另一個類似的複雜公式 接著重複一樣的loss function ------------------------------------------------------------------------------ 目前卡在每次進行NN計算後我都只能得到一個值,例如:E1_1 如果是這樣的話就沒辦法進行loss function的計算 想請問是否有什麼方法可以讓我把 E1_1 E1_2 E1_3 全部算完後再計算loss function呢? 謝謝 :) ※ 編輯: dogs1231992 (73.251.28.27), 02/01/2019 13:55:17

02/01 14:09, 6年前 , 2F
你loss function要設計的有彈性,不要寫死
02/01 14:09, 2F
f大您好,我目前參考的是莫煩的範例 loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1])) 在他的範例裡面由於prediction是直接從NN的結果得到,因此不會有其它計算的問題 想請問您是否有相關關鍵字或者程式碼可以讓小弟拜讀呢? 我最近找google的資料,幾乎都是用上述這類方法來寫loss function 還沒看到有較為彈性的範例的說 ※ 編輯: dogs1231992 (73.251.28.27), 02/01/2019 14:19:05

02/01 16:29, 6年前 , 3F
你有設定batch size 嗎?還是都一個個餵?
02/01 16:29, 3F

02/01 16:31, 6年前 , 4F
老實說你的loss function 看起來蠻蠻基本的,不懂為
02/01 16:31, 4F

02/01 16:31, 6年前 , 5F
何會卡住
02/01 16:31, 5F
Y大,我沒有設定Batch Size (或者說我不知道我有沒有設定) 我的input目前是 4 x 2 的矩陣 (我把兩個images的原子共四個放在一起,每個原子有兩個參數) NN為 2 x 15 x 1 輸出Ys會是一個 4 x 1 的矩陣 此時我得手動分配第0-1個輸出是屬於第一個image,第2-3個輸出屬於第二個image ------------------------------------------------------------------------------ 如果可能的話,我希望輸入是 2 x 2 x 2 的矩陣 有 2 個images,每個image有 2 個 原子 (或者說最多2個),每個原子有 2 個參數 一次進去一整個image,然後輸出整個image的答案 ------------------------------------------------------------------------------ 如果說把整個矩陣轉成下列方法會比較方便的話我也想試試看: 種類 s1 有 4個原子,每個原子有 2個參數,NN1輸入是 4 x 2,輸出是 4 x 1 種類 s2 有 5個原子,每個原子有 3個參數,NN2輸入是 5 x 3,輸出是 5 x 1 同時跑完 NN1 及 NN2 之後拿 4 x 1 及 5 x 1的答案進行loss function 的計算 再用這個 loss function 回去訓練 NN1 及 NN2 (同時訓練?) ※ 編輯: dogs1231992 (45.3.84.194), 02/02/2019 02:39:05

02/02 07:39, 6年前 , 6F
我會建議你不要用一個個原子去想 而是用image的角度
02/02 07:39, 6F

02/02 07:39, 6年前 , 7F
因為你的目標En單位是每個image
02/02 07:39, 7F

02/02 07:41, 6年前 , 8F
就直接用(N, M, P)大小的矩陣直接去train不用拆開
02/02 07:41, 8F

02/02 07:42, 6年前 , 9F
對應的label為長度(N,)的矩陣 這邊N就是batch size
02/02 07:42, 9F
Y大,想請問您的意思是是否為: 我的單一個input就是 M x P 的矩陣 輸出則為 M個參數 或者 直接把所有輸出加總在一起變成一個En? N個images在訓練後就會得到 N個 En 如果是這樣的話,想請問是否有辦法在輸入 M x P 的矩陣時分辨誰要走NN1,誰要走NN2? 第一次接觸TensorFlow,還沒辦法從之前的觀念轉過來 Q___Q ※ 編輯: dogs1231992 (73.251.28.27), 02/02/2019 12:11:46
文章代碼(AID): #1SKs9LG7 (Python)
文章代碼(AID): #1SKs9LG7 (Python)