Używam tf.slim do implementacji autoencodera. I to całkowicie splotowego z poniższej architekturze:Ponowne użycie grubości warstwy w Tensorflow
[conv, outputs = 1] => [conv, outputs = 15] => [conv, outputs = 25] =>
=> [conv_transpose, outputs = 25] => [conv_transpose, outputs = 15] =>
[conv_transpose, outputs = 1]
To musi być w pełni splotowy i nie mogę zrobić łączenie (ograniczenia większego problemu). Chcę korzystać z usług ciężary, więc
encoder_W_3 = decoder_W_1_Transposed
(tak ciężary pierwszej warstwy dekodera są te warstwy ostatni enkodera, transponowane).
Gdybym ponowne ciężarów regularny sposób tfslim pozwala na ich ponowne wykorzystanie, czyli ponowne = True, a potem po prostu podać nazwę zakresu warstwie chcesz użyć ponownie, mam problem rozmiar:
ValueError: Trying to share variable cnn_block_3/weights, but specified shape (21, 11, 25, 25) and found shape (21, 11, 15, 25).
To sprawia, sens, jeśli nie dokonasz transpozycji wag poprzedniego modelu. Czy ktoś ma pomysł, w jaki sposób mogę przetransponować te wagi?
PS: Wiem, że jest to bardzo abstrakcyjne i ręczne machanie, ale pracuję z niestandardowym API, na górze tfslim, więc nie mogę tutaj zamieszczać przykładów kodu.
Jak wiem, wagi w Tensorflow mają kształt jako "[wysokość_filtrów, szerokość_filtrów, w_kanałach, kanały_wyjściowe]". Przypuszczam, że masz taki sam rozmiar filtra dla każdej warstwy, więc kiedy przenosisz wagi, powinna istnieć odpowiednia dla dekoderów i koderów? np. '[output = 1] => [outputs = 15]' może być użyte tylko przez '[output = 15] => [outputs = 1]'. Z komunikatu o błędzie, przypuszczam, że '15 => 25' zostało przypisane do' 25 => 25'. Ale kiedy liczby wag tych dwóch warstw są różne, w jaki sposób mogą być udostępniane? – Seven