Val_loss là gì

Có ít nhất hai vấn đề riêng biệt với câu hỏi của bạn.

Bây giờ, câu hỏi đầu tiên cần được làm rõ từ các bình luận của Matias và câu trả lời khác: độ chính xác là không có ý nghĩa trong một vấn đề hồi quy, chẳng hạn như của bạn; xem thêm bình luận của patyork trong chủ đề Keras này . Dù tốt hay xấu, thực tế là Keras sẽ không "bảo vệ" bạn hoặc bất kỳ người dùng nào khác đưa các yêu cầu không có ý nghĩa vào mã của bạn, tức là bạn sẽ không gặp phải bất kỳ lỗi nào, hoặc thậm chí là một cảnh báo, rằng bạn đang cố gắng làm điều gì đó không có ý nghĩa, chẳng hạn như yêu cầu độ chính xác trong cài đặt hồi quy.

Đã làm rõ điều đó, vấn đề khác là:

Vì Keras thực sự trả về "độ chính xác", ngay cả trong cài đặt hồi quy, chính xác thì nó là gì và nó được tính như thế nào?

Để làm sáng tỏ ở đây, hãy hoàn nguyên dữ liệu công khai (vì bạn không cung cấp bất kỳ chi tiết nào về dữ liệu của mình), cụ thể là bộ dữ liệu giá nhà Boston (được lưu cục bộ dưới dạng housing.csv) và chạy thử nghiệm đơn giản như sau:

import numpy as np import pandas import keras from keras.models import Sequential from keras.layers import Dense # load dataset dataframe = pandas.read_csv("housing.csv", delim_whitespace=True, header=None) dataset = dataframe.values # split into input (X) and output (Y) variables X = dataset[:,0:13] Y = dataset[:,13] model = Sequential() model.add(Dense(13, input_dim=13, kernel_initializer='normal', activation='relu')) model.add(Dense(1, kernel_initializer='normal')) # Compile model asking for accuracy, too: model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy']) model.fit(X, Y, batch_size=5, epochs=100, verbose=1)

Như trong trường hợp của bạn, lịch sử phù hợp mô hình (không được hiển thị ở đây) cho thấy mức giảm giảm và độ chính xác tăng lên đáng kể. Bây giờ chúng ta hãy đánh giá hiệu suất mô hình trong cùng một tập huấn luyện, sử dụng chức năng tích hợp Keras thích hợp:

score = model.evaluate(X, Y, verbose=0) score # [16.863721372581754, 0.013833992168483997]

Nội dung chính xác của mảng score phụ thuộc vào chính xác những gì chúng tôi đã yêu cầu trong quá trình biên dịch mô hình; trong trường hợp của chúng tôi ở đây, yếu tố đầu tiên là sự mất mát (MSE) và yếu tố thứ hai là "độ chính xác".

Tại thời điểm này, chúng ta hãy xem định nghĩa của Keras binary_accuracy trong tệp metrics.py :

def binary_accuracy(y_true, y_pred): return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)

Vì vậy, sau khi Keras đã tạo ra các dự đoán y_pred, trước tiên, nó sẽ làm tròn chúng và sau đó kiểm tra xem có bao nhiêu trong số chúng bằng với các nhãn thực sự y_true, trước khi có nghĩa.

Hãy sao chép thao tác này bằng mã Python & Numpy đơn giản trong trường hợp của chúng tôi, trong đó các nhãn thực sự là Y:

y_pred = model.predict(X) l = len(Y) acc = sum([np.round(y_pred[i])==Y[i] for i in range(l)])/l acc # array([0.01383399])

Chà, chơi lô tô! Đây thực sự là cùng một giá trị được trả về bởi score[1] ở trên ...

Để rút ngắn một câu chuyện dài: vì bạn (một cách sai lầm) yêu cầu metrics=['accuracy'] trong quá trình biên dịch mô hình của bạn, Keras sẽ làm hết sức mình để đáp ứng cho bạn , và sẽ trả lại một số "độ chính xác" thực sự, được tính như trên, mặc dù điều này hoàn toàn vô nghĩa trong thiết lập của bạn.


Có khá nhiều cài đặt trong đó Keras, dưới mui xe, thực hiện các hoạt động khá vô nghĩa mà không đưa ra bất kỳ gợi ý hay cảnh báo nào cho người dùng; Hai trong số chúng tôi đã tình cờ gặp là:

  • Đưa ra kết quả vô nghĩa khi, trong cài đặt nhiều lớp, người ta tình cờ yêu cầu loss='binary_crossentropy' (thay vì categorical_crossentropy) với metrics=['accuracy'] - xem câu trả lời của tôi trong Hiệu suất của Keras binary_crossentropy so với hiệu suất phân loại? và Tại sao binary_crossentropy chính xác hơn c sortical_crossentropy để phân loại đa lớp trong Keras?

  • Vô hiệu hóa hoàn toàn Dropout, trong trường hợp cực đoan khi một người yêu cầu tỷ lệ bỏ học là 1.0 - hãy xem câu trả lời của tôi trong Hành vi bỏ học trong Keras với tỷ lệ = 1 (giảm tất cả các đơn vị đầu vào) không như mong đợi