Tôi muốn làm một cái gì đó tương tự như giấy Hoàn toàn mạng lưới liên kết (https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf) bằng cách sử dụng Keras. Tôi có một mạng lưới kết thúc bằng việc làm phẳng các bản đồ tính năng và chạy chúng qua một vài lớp dày đặc. Tôi muốn tải trọng số từ một mạng như thế này vào một nơi mà các lớp dày đặc được thay thế bằng các cuộc cách mạng tương đương.Làm thế nào để chuyển đổi một lớp dày đặc thành một lớp chập tương đương trong Keras?
Mạng VGG16 đi kèm với Keras có thể được sử dụng làm ví dụ, trong đó đầu ra 7x7x512 của MaxPooling2D cuối cùng() được làm phẳng và sau đó đi vào lớp Dày đặc (4096). Trong trường hợp này, Dense (4096) sẽ được thay thế bằng một chập 7x7x4096.
Mạng thực của tôi hơi khác một chút, có lớp GlobalAveragePooling2D() thay vì MaxPooling2D() và Flatten(). Đầu ra của GlobalAveragePooling2D() là một tensor 2D, và không cần phải làm phẳng thêm nữa, vì vậy tất cả các lớp dày đặc bao gồm cả lớp đầu tiên sẽ được thay thế bằng các vòng xoắn 1x1.
Tôi đã nhìn thấy câu hỏi này: Python keras how to transform a dense layer into a convolutional layer có vẻ rất giống nhau nếu không giống nhau. Vấn đề là tôi không thể có được giải pháp được đề xuất để làm việc, bởi vì (a) Tôi đang sử dụng TensorFlow làm phụ trợ, do đó, sắp xếp lại trọng lượng/bộ lọc "xoay vòng" không đúng, và (b) tôi không thể làm thế nào để tải trọng lượng. Tải tập tin trọng số cũ vào mạng mới với model.load_weights(by_name=True)
không hoạt động, vì tên không khớp (và thậm chí nếu chúng có kích thước khác nhau).
Bố cục sắp xếp lại khi sử dụng TensorFlow là gì?
Làm cách nào để tải trọng số? Tôi có tạo một trong mỗi mô hình, gọi model.load_weights() trên cả hai để tải trọng số giống nhau và sau đó sao chép một số trọng số bổ sung cần sắp xếp lại?