Transfer learning với đầu vào kích thước X*X*Y với Y>3


#1

Chào mọi người, mọi người cho mình hỏi là có thể Transfer learning với input có số kênh (chiều?) >3 được không, nếu có thì làm cách nào hoặc có thể cho mình một ví dụ cụ thể được không? Cảm ơn mọi người!


#2

Bạn có thể thêm 1 ConvNet layer trước pretrained model để map từ Y đến 3.


#3

Mình bổ xung thêm là, nên cho một vài cái layer convolution để biến nhiều chiều thành 3 chiều. Và cách train nên để như sau.

  1. Lập một mạng nhỏ từ XXY về XX3, gọi là Net1
  2. Nối Net1 với Net2 (Net mà bạn muốn dùng fine tuning). Output của Net1 là input của Net2. Tạo ra Net3 là kết hợp của Net1 và Net2
  3. Train Net3 với việc dóng băng Net2 (không learn weight của Net2). Ép Net1 biến XXY về XX3 ở dạng input chuẩn của Net2.
  4. Giờ bạn có thể finetune layer của Net2 mà bạn muốn.

Đây chỉ là một cách để transfer learning. Còn có nhiều cách khác nữa.

Mình lấy ví dụ như giả sử Y là 6. Mình sẽ tạo input XX3 (từ 1-3) và XX3 (từ 4 - 6) và cho vào 2 mạng Net2 tương ứng (gọi là Net2_1, và Net2_2). Finetune 2 mạng này. Sau đó ghép 2 kết quả lại thông qua - concatinate (ghép feature) hay summation (trung bình đầu ra) và finetuning thêm 1 lần nữa.


#4

Cảm ơn anh ạ. Em hiểu rồi. Anh có nhớ bài báo nào về vấn đề này hay một challenge nào trên kaggle về dạng như này chưa ạ?

Thông thường làm như vậy (với các bài báo đã public) kết quả có hơn so với xây một mạng thông thường và train từ đầu hay không ạ?