2017-05-08 22 views
6

Tôi cố gắng tham gia cuộc thi Kaggle đầu tiên của mình, trong đó RMSLE được đưa ra làm chức năng mất yêu cầu. Vì tôi không tìm thấy cách thực hiện điều này loss function Tôi đã cố gắng giải quyết cho RMSE. Tôi biết đây là một phần của Keras trong quá khứ, có cách nào để sử dụng nó trong phiên bản mới nhất, có thể với chức năng tùy chỉnh qua backend?Chức năng mất RMSE/RMSLE trong Keras

Đây là NN tôi thiết kế:

from keras.models import Sequential 
from keras.layers.core import Dense , Dropout 
from keras import regularizers 

model = Sequential() 
model.add(Dense(units = 128, kernel_initializer = "uniform", activation = "relu", input_dim = 28,activity_regularizer = regularizers.l2(0.01))) 
model.add(Dropout(rate = 0.2)) 
model.add(Dense(units = 128, kernel_initializer = "uniform", activation = "relu")) 
model.add(Dropout(rate = 0.2)) 
model.add(Dense(units = 1, kernel_initializer = "uniform", activation = "relu")) 
model.compile(optimizer = "rmsprop", loss = "root_mean_squared_error")#, metrics =["accuracy"]) 

model.fit(train_set, label_log, batch_size = 32, epochs = 50, validation_split = 0.15) 

Tôi đã thử một root_mean_squared_error chức năng tùy biến tôi tìm thấy trên GitHub nhưng đối với tất cả tôi biết cú pháp không phải là những gì được yêu cầu. Tôi nghĩ rằng y_truey_pred sẽ phải được xác định trước khi truyền cho sự trở lại nhưng tôi không có ý tưởng như thế nào một cách chính xác, tôi chỉ mới bắt đầu với lập trình trong python và tôi thực sự không phải là tốt trong toán học ...

from keras import backend as K 

def root_mean_squared_error(y_true, y_pred): 
     return K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1)) 

Tôi nhận được lỗi sau với chức năng này:

ValueError: ('Unknown loss function', ':root_mean_squared_error') 

Cảm ơn ý tưởng của bạn, tôi đánh giá cao mọi trợ giúp!

Trả lời

13

Khi bạn sử dụng một sự mất mát tùy chỉnh, bạn cần phải đặt nó mà không có dấu ngoặc kép, như bạn vượt qua các đối tượng chức năng, không phải là một chuỗi:

def root_mean_squared_error(y_true, y_pred): 
     return K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1)) 

model.compile(optimizer = "rmsprop", loss = root_mean_squared_error, 
       metrics =["accuracy"]) 
+1

trình hoàn toàn tốt đẹp, cảm ơn bạn rất nhiều vì đã chỉ ra sai lầm đó. Tôi thực sự không nghĩ về nó theo cách đó vì tôi là người mới lập trình. Bạn sẽ không biết bằng cách nào để chỉnh sửa hàm tùy chỉnh này để nó tính toán sai số LOGARITHMIC vuông trung bình gốc, phải không? – dennis

+0

Nó cung cấp cho tôi chức năng mất không xác định: root_mean_squared_error – Jitesh

+0

@Jitesh Vui lòng không đưa ra nhận xét như vậy, tạo câu hỏi của riêng bạn với mã nguồn. –

Các vấn đề liên quan