Tôi gặp vấn đề khi tìm ánh xạ chính xác của các trọng số để chuyển một lớp dày đặc thành một lớp chập chững.Python keras cách chuyển một lớp dày đặc thành một lớp chập chững
Đây là một đoạn trích của một ConvNet mà tôi đang làm việc trên:
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
Sau MaxPooling, đầu vào là hình dạng (512,7,7). Tôi muốn chuyển đổi lớp dày đặc thành một lớp xoắn để làm cho nó trông như thế này:
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Convolution2D(4096, 7, 7, activation='relu'))
Tuy nhiên, tôi không biết làm thế nào tôi cần phải định hình lại các trọng số để ánh xạ một cách chính xác trọng lượng dẹt đến (4096,512,7,7) cấu trúc đó là cần thiết cho lớp convolutional? Ngay bây giờ, trọng lượng của lớp dày đặc có kích thước (25088,4096). Tôi cần bằng cách nào đó ánh xạ các phần tử 25088 này với kích thước (512,7,7) trong khi vẫn giữ bản đồ chính xác về trọng số cho các nơron. Cho đến nay, tôi đã thử nhiều cách định hình lại và sau đó chuyển đổi nhưng tôi đã không thể tìm thấy bản đồ chính xác.
Một ví dụ về những gì tôi đã cố gắng sẽ là:
weights[0] = np.transpose(np.reshape(weights[0],(512,7,7,4096)),(3,0,1,2))
nhưng nó không lập bản đồ trọng lượng một cách chính xác. Tôi đã xác minh xem bản đồ có chính xác hay không bằng cách so sánh đầu ra cho cả hai mô hình. Nếu được thực hiện đúng, tôi mong đợi đầu ra phải giống nhau.