2017-04-16 3 views
0

これは私のモデルの抜粋です:私はkeras神経網を訓練しています。私はy_true * y_predによって与えられたカスタム損失関数を持っていたいと思います。これは許可されていますか?

W1 = create_base_network(latent_dim) 

input_a = Input(shape=(1,latent_dim)) 
input_b = Input(shape=(1,latent_dim)) 

x_a = encoder(input_a) 
x_b = encoder(input_b) 

processed_a = W1(x_a) 
processed_b = W1(x_b) 

del1 = Lambda(Delta1, output_shape=Delta1_output_shape)([processed_a, processed_b]) 
model = Model(input=[input_a, input_b], output=del1) 

# train 
rms = RMSprop() 
model.compile(loss='kappa_delta_loss', optimizer=rms) 

基本的には、ニューラルネットは、2つの入力の(事前に訓練を受けた)エンコーダ表現を取得し、通過することにより、2つの入力の予測値の差を計算していますMLP。この差はネットワークのy_predであるDelta1です。私は損失関数をy_pred * y_trueにします。しかし、私がそれをすると、「無効な目的:kappa_delta_loss」というエラーが表示されます。

私は間違っていますか?

答えて

0

ほとんどあなた自身が質問に答えます。 このような https://github.com/fchollet/keras/blob/master/keras/objectives.pyにおけるもののようなあなたの目的 関数を作成し、https://github.com/fchollet/keras/issues/369

から

import theano import theano.tensor as T 

epsilon = 1.0e-9 
def custom_objective(y_true, y_pred): 
    '''Just another crossentropy''' 
    y_pred = T.clip(y_pred, epsilon, 1.0 - epsilon) 
    y_pred /= y_pred.sum(axis=-1, keepdims=True) 
    cce = T.nnet.categorical_crossentropy(y_pred, y_true) 
    return cce and pass it to compile argument 

model.compile(loss=custom_objective, optimizer='adadelta') 

だから、あなたは二つの引数、最初の対象となると第二あなたとあなたのカスタム損失関数を作成する必要があります予測。あなたの出力を想定し

は(y_pred)スカラで、カスタムの目的は、kerasバックエンドのために

def custom objective(y_true,y_pred) 
    return K.dot(y_true,y_pred) 

K可能性があり(theano例よりもより一般的な)

関連する問題