Sparse_categorical_crossentropy là gì


Hỏi ĐápLà gì
Diễn đàn Machine Learning cơ bản

[08/20/2019 22:32] Em chào anh chị ạ. Em đang tập code mạng . . .       Facebook-Group


system             2019-08-20 15:32:55 UTC                 #1

Nguồn post: https://www.facebook.com/257768141347267_750678065389603
Em chào anh chị ạ. Em đang tập code mạng Neural Network với bộ Mnist định dạng csv ạ. Em đang gặp vấn đề là output của mạng xấp sỉ bằng 0 nên khi đưa vào log() của hàm cross entropy thì bị ra inf ạ.

Code của em đây ạ: http://codepad.org/sDEzUN4U

Cụ thể, mạng của em gồm 4 layer ạ.

  • Layer input là biểu diễn dưới dạng vector cột một mẫu của tập dữ liệu
  • Hai layer ẩn mỗi layer đều có 64 unit với hàm activation là Relu
  • Layer output thì có 10 unit (dạng one hot coding) với hàm activation là Softmax

Anh chị có thể cho em hỏi cách khắc phục việc output sấp xỉ bằng 0 với ạ. Và cấu trúc mạng của em có vấn đề gì không ạ. Cấu trúc này em sao chép trên mạng rồi code thử xem kết quả có giống với người ta không ạ.

Em cảm ơn anh chị ạ.


system             2019-08-20 16:04:12 UTC                 #2

Bạn tìm hiểu về vanishing/exploding gradients nhé


system             2019-08-20 17:28:48 UTC                 #3

Nếu đang dùng Softmax Cross Entropy là hàm loss thì bạn nên kiểm tra lại code. Mình đoán không nhầm thì output trong hình trên của bạn dự đoán ra 2 kết quả là số 6 đúng k? Mình thấy xác suất output ở vị trí index=5 đúng bằng 1.0.

Hàm entropy để tính khoảng cách giữa 2 phân bố xác suất sẽ như sau: H(p, y) = -Sigma(y_i*log(p_i)). Với p là vector output, y là label dạng one-hot. Nếu là one-hot vector thì y chỉ chứa duy nhất một giá trị 1, còn lại là 0. Như vậy dù cho output p của bạn chứa nhiều giá trị gần 0 đi chăng nữa, khi nhân với giá trị 0 tương ứng ở vector y sẽ ra kết quả là 0 cả. Mình nghĩ mạng của bạn đang train đúng hướng, và hình như bạn đang hiểu sai về Softmax Cross Entropy.


system             2019-08-20 17:33:49 UTC                 #4

https://github.com/phamdanglam/Basic-Deep-Neural-Networks-Applied-on-MNIST-Handwritten-Digit-Dataset có mấy ví dụ ở đây với tensorflow. Bạn xem thủ có giup ích gì o


system             2019-08-20 23:04:00 UTC                 #5

kedarps

Cross Entropy vs. Sparse Cross Entropy: When to use one over the other    machine-learning, conv-neural-network, loss-functions, information-theory   asked by kedarps on 03:03PM - 31 Jan 18 UTC

Bạn tham khảo nhé. Categorical crossentropy dùng cho one-hot-encoded data, nhưng cột Yi của mnist là integer-encoded nên người ta còn dùng sparse categorical crossentropy (hàm có sẵn trong tensorflow). Bạn có thể đọc trên stackoverflow để xem hàm đó viết khác như nào. Không biết có giúp được bạn ko

:smile:

system             2019-08-21 00:57:14 UTC                 #6

để tránh log(0) = inf, bạn hãy giới hạn cận dưới phần tử đó bằng một giá trị epsilon nhỏ nào đó, ví dụ như trong code này: https://github.com/keras-team/keras/blob/c10d24959b0ad615a21e671b180a1b2466d77a2b/keras/backend/numpy_backend.py


system             2019-08-21 15:01:01 UTC                 #7

mình chỉ nhìn phần tính cost trong code của bạn và mình nhận thấy như thế này. Thứ nhất: bạn dùng vòng for để tính toán ma trận và như vậy là chưa tận dụng tính chất broadcasting của numpy. Code chạy sẽ chậm và không mang đậm tính tổng quát. Thứ hai: mặc dù công thức định nghĩa tính Cross Entropy bằng cái tổng xích ma to bự đó nhưng thực tế khi code thì quy ước 0.log(0) = 0 và chỉ cần tính log tương ứng cho nhãn dự đoán. ví dụ label = 1 và predict = [0.1 0.8 0.1] là xác suất tương ứng cho các lớp là 0, 1 và 2 thì loss bằng -log(0.8).

:upside_down_face:

Trang chủ Chuyên mục FAQ/Hướng dẫn Điều khoản Dịch vụ Chính sách Riêng tư

Powered by Discourse, best viewed with JavaScript enabled