[問題] TensorFlow如何設定複雜的loss function?
各位大家好,小弟最近想用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
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
02/01 16:29, 3F
→
02/01 16:31,
6年前
, 4F
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
02/02 07:39, 6F
→
02/02 07:39,
6年前
, 7F
02/02 07:39, 7F
→
02/02 07:41,
6年前
, 8F
02/02 07:41, 8F
→
02/02 07:42,
6年前
, 9F
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
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章