'from_logits=True' trong Hàm mất Keras/TensorFlow là gì? Thông tin dữ liệu PlatoBlockchain. Tìm kiếm dọc. Ái.

'From_logits = True' trong Keras / TensorFlow Loss Functions là gì?

Các khuôn khổ Deep Learning như Keras đã hạ thấp rào cản gia nhập đối với quần chúng và dân chủ hóa việc phát triển các mô hình DL cho những người chưa có kinh nghiệm, những người có thể dựa vào các giá trị mặc định hợp lý và các API đơn giản để chịu gánh nặng và tạo ra kết quả tốt.

Một sự nhầm lẫn phổ biến nảy sinh giữa các học viên học sâu mới hơn khi sử dụng các hàm mất Keras để phân loại, chẳng hạn như CategoricalCrossentropySparseCategoricalCrossentropy:

loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)

loss = keras.losses.SparseCategoricalCrossentropy(from_logits=False)

from_logits cờ đề cập đến?

Câu trả lời là khá đơn giản, nhưng yêu cầu xem xét đầu ra của mạng mà chúng tôi đang cố gắng phân loại bằng cách sử dụng hàm mất mát.

Đăng nhập và Xác suất SoftMax

Mẩu chuyện dài:

Xác suất được chuẩn hóa - tức là có phạm vi giữa [0..1]. Nhật ký không được chuẩn hóa và có thể có phạm vi giữa [-inf...+inf].

Tùy thuộc vào lớp đầu ra của mạng của bạn:

output = keras.layers.Dense(n, activation='softmax')(x)

output = keras.layers.Dense(n)(x)

Đầu ra của Dense lớp sẽ hay trở về:

  • xác suất: Đầu ra được chuyển qua một hàm SoftMax để chuẩn hóa đầu ra thành một tập hợp các xác suất n, tất cả cộng lại 1.
  • nhật ký: n các hoạt động.

Quan niệm sai lầm này có thể phát sinh từ cú pháp ngắn gọn cho phép bạn thêm kích hoạt vào một lớp, có vẻ dưới dạng một lớp duy nhất, mặc dù nó chỉ là viết tắt của:

output = keras.layers.Dense(n, activation='softmax')(x)

dense = keras.layers.Dense(n)(x)
output = keras.layers.Activation('softmax')(dense)

Hàm mất mát của bạn phải được thông báo về việc liệu nó có nên mong đợi một phân phối chuẩn hóa (đầu ra được chuyển qua một hàm SoftMax) hoặc đăng nhập hay không. Vì thế from_logits lá cờ!

Khi nào nên from_logits = True?

Nếu mạng của bạn chuẩn hóa các xác suất đầu ra, thì hàm mất mát của bạn sẽ được đặt from_logits đến False, vì nó không chấp nhận đăng nhập. Đây cũng là giá trị mặc định của tất cả các lớp tổn thất chấp nhận cờ, vì hầu hết mọi người đều thêm activation='softmax' đến các lớp đầu ra của chúng:

model = keras.Sequential([
    keras.layers.Input(shape=(10, 1)),
    
    keras.layers.Dense(10, activation='softmax') 
])

input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)

Kết quả này trong:

tf.Tensor(
[[[0.12467965 0.10423233 0.10054766 0.09162105 0.09144577 0.07093797
   0.12523937 0.11292477 0.06583504 0.11253635]]], shape=(1, 1, 10), dtype=float32)

Vì mạng này dẫn đến phân phối chuẩn hóa - khi so sánh kết quả đầu ra với đầu ra mục tiêu và phân loại chúng thông qua hàm mất phân loại (cho nhiệm vụ thích hợp) - bạn nên đặt from_logits đến Falsehoặc để giá trị mặc định ở lại.

Mặt khác, nếu mạng của bạn không áp dụng SoftMax trên đầu ra:

model = keras.Sequential([
    keras.layers.Input(shape=(10, 1)),
    
    keras.layers.Dense(10)
])

input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)

Kết quả này trong:

tf.Tensor(
[[[-0.06081138  0.04154852  0.00153442  0.0705068  -0.01139916
    0.08506121  0.1211026  -0.10112958 -0.03410497  0.08653068]]], shape=(1, 1, 10), dtype=float32)

Bạn cần phải thiết lập from_logits đến True cho hàm mất mát để xử lý đúng các đầu ra.

Khi nào sử dụng SoftMax trên đầu ra?

Hầu hết các học viên áp dụng SoftMax trên đầu ra để cung cấp phân phối xác suất chuẩn hóa, vì trong nhiều trường hợp, đây là những gì bạn sẽ sử dụng mạng - đặc biệt là trong tài liệu giáo dục đơn giản hóa. Tuy nhiên, trong một số trường hợp, bạn không muốn áp dụng chức năng cho đầu ra, để xử lý nó theo một cách khác trước khi áp dụng SoftMax hoặc một chức năng khác.

Một ví dụ đáng chú ý đến từ các mô hình NLP, trong đó xác suất thực sự trên một lượng từ vựng lớn có thể xuất hiện trong tensor đầu ra. Áp dụng SoftMax trên Tất cả bọn họ và tham lam nhận được argmax thường không tạo ra kết quả tốt.

Tuy nhiên, nếu bạn quan sát nhật ký, hãy trích xuất Top-K (trong đó K có thể là bất kỳ số nào nhưng thường nằm ở đâu đó giữa [0...10]), và chỉ sau đó áp dụng SoftMax vào top-k các mã thông báo có thể có trong từ vựng làm thay đổi phân phối đáng kể và thường tạo ra kết quả thực tế hơn.

Xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, các tiêu chuẩn được ngành công nghiệp chấp nhận và bảng lừa đảo đi kèm. Dừng lệnh Googling Git và thực sự học nó!

Đây được gọi là lấy mẫu Top-K và mặc dù nó không phải là chiến lược lý tưởng, nhưng nó thường hoạt động tốt hơn đáng kể so với lấy mẫu tham lam.

Tiến xa hơn - Học sâu thực tế cho thị giác máy tính

Bản tính ham học hỏi của bạn khiến bạn muốn tiến xa hơn? Chúng tôi khuyên bạn nên kiểm tra Khóa học: “Học sâu thực tế cho thị giác máy tính với Python”.

Một khóa học thị giác máy tính khác?

Chúng tôi sẽ không phân loại các chữ số MNIST hoặc thời trang MNIST. Họ đã phục vụ phần của họ từ lâu lắm rồi. Quá nhiều tài nguyên học tập đang tập trung vào bộ dữ liệu cơ bản và kiến ​​trúc cơ bản trước khi để các kiến ​​trúc hộp đen nâng cao gánh vác gánh nặng về hiệu suất.

Chúng tôi muốn tập trung vào sự làm sáng tỏ, tính thực tiễn, sự hiểu biết, trực giácdự án thực tế. Muốn học làm thế nào Bạn có thể làm nên điều khác biệt? Chúng tôi sẽ đưa bạn đi từ cách bộ não của chúng ta xử lý hình ảnh để viết một bộ phân loại học sâu cấp độ nghiên cứu cho bệnh ung thư vú đến mạng lưới học tập sâu "ảo giác", dạy cho bạn các nguyên tắc và lý thuyết thông qua công việc thực tế, trang bị cho bạn bí quyết và công cụ để trở thành chuyên gia ứng dụng học sâu để giải quyết vấn đề thị giác máy tính.

Có gì bên trong?

  • Các nguyên tắc đầu tiên của tầm nhìn và cách máy tính có thể được dạy để "nhìn"
  • Các tác vụ và ứng dụng khác nhau của thị giác máy tính
  • Các công cụ giao dịch sẽ giúp công việc của bạn dễ dàng hơn
  • Tìm kiếm, tạo và sử dụng bộ dữ liệu cho thị giác máy tính
  • Lý thuyết và ứng dụng của Mạng nơ ron chuyển đổi
  • Xử lý sự thay đổi tên miền, đồng xuất hiện và các sai lệch khác trong tập dữ liệu
  • Chuyển giao Học tập và tận dụng thời gian đào tạo cũng như các tài nguyên tính toán của người khác vì lợi ích của bạn
  • Xây dựng và đào tạo một máy phân loại ung thư vú tiên tiến nhất
  • Cách áp dụng liều lượng hoài nghi lành mạnh vào các ý tưởng chủ đạo và hiểu được hàm ý của các kỹ thuật được áp dụng rộng rãi
  • Hình dung “không gian khái niệm” của ConvNet bằng t-SNE và PCA
  • Các nghiên cứu điển hình về cách các công ty sử dụng kỹ thuật thị giác máy tính để đạt được kết quả tốt hơn
  • Đánh giá mô hình thích hợp, hình dung không gian tiềm ẩn và xác định sự chú ý của mô hình
  • Thực hiện nghiên cứu miền, xử lý tập dữ liệu của riêng bạn và thiết lập các thử nghiệm mô hình
  • Các kiến ​​trúc tiên tiến, sự phát triển của các ý tưởng, điều gì làm cho chúng trở nên độc đáo và cách thực hiện chúng
  • KerasCV - một thư viện WIP để tạo các mô hình và đường ống hiện đại
  • Cách phân tích cú pháp và đọc các bài báo và tự thực hiện chúng
  • Lựa chọn mô hình tùy thuộc vào ứng dụng của bạn
  • Tạo một đường dẫn học máy từ đầu đến cuối
  • Phong cảnh và trực giác khi phát hiện đối tượng với R-CNN, RetinaNets, SSD và YOLO nhanh hơn
  • Phân đoạn phiên bản và ngữ nghĩa
  • Nhận dạng đối tượng trong thời gian thực với YOLOv5
  • Đào tạo máy dò đối tượng YOLOv5
  • Làm việc với Máy biến áp bằng KerasNLP (thư viện WIP dành cho ngành công nghiệp)
  • Tích hợp Transformers với ConvNets để tạo phụ đề cho hình ảnh
  • Ngủ sâu

Kết luận

Trong hướng dẫn ngắn này, chúng tôi đã xem xét from_logits tranh luận cho các lớp mất Keras, thường đặt ra câu hỏi với những người mới học.

Sự nhầm lẫn có thể phát sinh từ cú pháp ngắn gọn cho phép thêm các lớp kích hoạt lên trên các lớp khác, trong định nghĩa của chính một lớp. Cuối cùng chúng tôi đã xem xét khi nào đối số nên được đặt thành True or False, và khi đầu ra nên được để dưới dạng logits hoặc chuyển qua một chức năng kích hoạt như SoftMax.

Dấu thời gian:

Thêm từ xếp chồng lên nhau