首页 > 解决方案 > 使用欧几里得距离损失函数的keras

问题描述

我对 Keras 自定义损失函数有一些问题。当我使用这个损失函数运行我的 Keras 模型时,我的损失值为NaN.

def euc_dist_keras(y_true, y_pred):
    return K.mean(K.sqrt(K.sum(K.square(y_true - y_pred), axis = -1, keepdims = True)))

这是我的代码。

(X_train,Y_train),(X_test,Y_test) = mnist.load_data()
X_train4D = X_train.reshape(X_train.shape[0],28,28,1).astype("float32")
X_test4D = X_test.reshape(X_test.shape[0],28,28,1).astype("float32")

X_train4D_normalize = X_train4D/255
X_test4D_normalize = X_test4D/255

Y_trainOneHot = np_utils.to_categorical(Y_train)
Y_testOneHot = np_utils.to_categorical(Y_test)

model = Sequential()
model.add(Conv2D(filters=16,kernel_size=(5,5),padding='same',input_shape=(28,28,1),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(filters=36,kernel_size=(5,5),padding='same',input_shape=(14,14,1),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128,activation='relu'))
model.add(Dropout(0.5))
#output layer
model.add(Dense(10,activation='softmax'))
print(model.summary())


model.compile(loss=euc_dist_keras,optimizer='adam',metrics=['accuracy'])
train_history = model.fit(x=X_train4D_normalize,y=Y_trainOneHot,validation_split=0.2\
                          ,epochs=10,batch_size=1,verbose=1)

标签: pythonkeras

解决方案


推荐阅读