2017-03-09 33 views
6

Tôi đang sử dụng tf.slim để triển khai bộ mã hóa tự động. Tôi hoàn toàn chuyển đổi với kiến ​​trúc sau:Sử dụng lại trọng lượng lớp trong Tensorflow

[conv, outputs = 1] => [conv, outputs = 15] => [conv, outputs = 25] => 
=> [conv_transpose, outputs = 25] => [conv_transpose, outputs = 15] => 
[conv_transpose, outputs = 1] 

Nó phải được chuyển hoàn toàn và tôi không thể kết hợp (giới hạn của vấn đề lớn hơn). Tôi muốn sử dụng các trọng lượng được buộc, vì vậy,

encoder_W_3 = decoder_W_1_Transposed 

(do đó trọng lượng của lớp giải mã đầu tiên là lớp của lớp mã hóa cuối cùng, được chuyển đổi).

Nếu tôi tái sử dụng trọng lượng đường tfslim thường xuyên cho phép bạn sử dụng lại chúng, tức là tái sử dụng = True và sau đó chỉ cần cung cấp tên phạm vi của lớp bạn muốn sử dụng lại, tôi nhận được kích thước phát hành:

ValueError: Trying to share variable cnn_block_3/weights, but specified shape (21, 11, 25, 25) and found shape (21, 11, 15, 25). 

Điều này làm cho ý nghĩa, nếu bạn không chuyển tải trọng số của mô hình trước đó. Có ai có ý tưởng về cách tôi có thể chuyển đổi những trọng số đó không?

PS: Tôi biết điều này rất trừu tượng và vẫy tay, nhưng tôi đang làm việc với api tùy chỉnh, trên đầu trang của tfslim, vì vậy tôi không thể đăng các ví dụ mã ở đây.

+0

Như tôi biết, trọng số trong Tensorflow có dạng là '[filter_height, filter_width, in_channels, out_channels]'. Tôi cho rằng bạn có cùng kích thước bộ lọc cho mỗi lớp, vì vậy khi bạn chuyển trọng số, cần có sự tương ứng với bộ giải mã và bộ mã hóa? ví dụ: '[output = 1] => [output = 15]' chỉ có thể được sử dụng bởi '[output = 15] => [output = 1]'. Từ thông báo lỗi, tôi đoán rằng '15 => 25' được gán cho' 25 => 25'. Nhưng khi số lượng trọng số của hai lớp này khác nhau, chúng có thể được chia sẻ như thế nào? – Seven

Trả lời

2

Có ai có ý tưởng về cách tôi có thể chuyển đổi trọng số đó không?

Transposition rất đơn giản:

new_weights = tf.transpose(weights, perm=[0, 1, 3, 2]) 

sẽ trao đổi hai trục trước.

Tuy nhiên, như @Seven đã đề cập, điều đó sẽ không đủ để giải quyết lỗi, vì tổng số lượng trọng lượng đã thay đổi.

+0

Điều này hoạt động tốt cho một chuyển vị của một biến hiện có. Tuy nhiên, với tf.slim, trọng số hạt nhân được ẩn đằng sau một trừu tượng - vì vậy việc tái sử dụng (và chuyển đổi) chúng nên được thực hiện thông qua phương thức khác, như chưa biết, phương pháp ... –

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