kerasで損失関数を作りたいのですが、動きません。
全体的なアドバイスと共に、x_decoded_valueにはプログラムのどこで入力したデータが入るのか、どのようなshapeのデータなのかを教えていただきたいです。
Ck, Qy_listなどは、グローバル変数です。
python
1def compute_loss(x, x_decoded_value): 2 """ Update loss 3 Args: 4 x: input of NN 5 x_decoded_value: output of NN 6 Returns: 7 J: loss of training 8 """ 9 k_nonself_dist = K.zeros(shape(len(Ck)-1)) 10 J = 0 11 for i in range(50): 12 Qx_embedding = ProtNet_NN.predict(Qx[i,:], batch_size=1) 13 k_self_dist = np.linalg.norm(Qx_embedding-np.array(Ck.loc[Qy_list[i]])) 14 _tmp = np.array(Ck[Ck.index!=Qy_list[i]]) 15 for j in range(len(Ck)-1): 16 k_nonself_dist[j] = np.linalg.norm(Qx_embedding-_tmp[j,:]) 17 J += (k_self_dist + np.log(np.sum(np.exp(-k_nonself_dist)))) / (Nc * 50) # Update loss 18 19 J = K.variable(J) # Tensor型に変換 20 return J
----------------追記----------------
損失関数を作る上で最低限守らなければならないことは、
① 関数内の変数は全てTensor型であること
② NNの出力層を損失関数内で用いること
でした。他にも何かありましたら追記します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/25 05:32
2018/07/25 06:29
2018/07/25 09:33 編集
2018/07/25 10:23
2018/07/25 11:12 編集
2018/07/25 11:12
2018/07/25 11:13