2016-05-01 21 views
8

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.

Trả lời

6

Vẫn đang tìm giải pháp? Ở đây là:

new_conv_weights = dense_weights.transpose(1,0).reshape(new_conv_shape)[:,:,::-1,::-1] 

trong trường hợp của bạn:

weights[0] = weights[0].transpose(1,0).reshape((4096,512,7,7))[:,:,::-1,::-1] 

Phần khôn lanh là bộ lọc conv lật [:,:, :: - 1, :: - 1]. Theano không co giật không tương quan (không giống như caffe, ví dụ). Do đó, trong Keras lọc như:

1 0 
0 0 

áp dụng cho ma trận:

1 2 3 4 5 
6 7 8 9 0 
1 2 3 4 5 

kết quả trong ma trận:

7 8 9 0 
2 3 4 5 

không này, như người ta mong đợi với tương quan:

1 2 3 4 
6 7 8 9 

Để làm cho mọi thứ hoạt động như dự kiến, bạn cần phải xoay bộ lọc 180 độ. Chỉ cần giải quyết vấn đề này cho bản thân mình, hy vọng điều này sẽ giúp ích cho bạn hoặc cho người khác. Chúc mừng.

Các vấn đề liên quan