以下のカスタム損失関数を作成しました。ここでは、入力形状を出力形状で除算して係数を作成する必要があります。
def distance_loss(x,y):
x_shape = K.int_shape(x)[1]
y_shape = K.int_shape(y)[1]
print(x_shape,y_shape)
factor = x_shape/y_shape
loss = tf.sqrt(factor) * tf.norm(x-y)
return tf.math.abs(loss)
これはモデルアーキテクチャです:
model = Sequential()
model.add(Dense(32,input_dim=4))
model.add(Dense(64,activation='relu'))
model.add(Dense(128,activation='relu'))
model.add(Dense(64,activation='relu'))
model.add(Dense(2,activation='relu'))
opt = Adam(lr = 0.001)
model.compile(optimizer = opt, loss=distance_loss,metrics=['accuracy'])
私がmodel.compile
ラインを走らせたとき。カスタムロスプリント
なし2
エラーをスローします
TypeError:/のサポートされていないオペランドタイプ: 'NoneType'および 'int'
トレーニングデータの入力形状は、トレーニングフェーズでのみ認識されることを読みました。この問題を回避する方法はありますか?
K.shape
代わりに使用してください:
def distance_loss(x,y):
x_shape = K.shape(x)[1]
y_shape = K.shape(y)[1]
factor = K.cast(x_shape, x.dtype) / K.cast(y_shape, y.dtype)
loss = tf.sqrt(factor) * tf.norm(x-y)
return tf.math.abs(loss)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加