Как извлечь несколько слоев вывода кодера в декодер? - PullRequest
1 голос
/ 30 октября 2019

Я строю модель самокодировщика с одним кодировщиком и двумя декодерами. Я хочу, чтобы выходная часть кодировщика была подключена к декодеру как U-net.но когда я пытаюсь вернуть список с четырьмя слоями вывода, для подключения декодера появляется "Graph отключен:" error.is kerasУ меня есть Modellist как pytorch?

Я не могу просто подключить кодировщик и декодер. потому что мне нужно сделать что-то для вывода кодера. и эта модель имеет два декодера. для этого есть API-интерфейс keras.

керас: 2.2.4 тензор потока: 1,12 питона: 3,68

кодирующая часть


                def enc_flow(e_dims, ae_dims, lowest_dense_res):
                    def func(inp):

                        x0 = downscale(e_dims, 3, 1,False)(inp)

                        x1 = downscale(e_dims * 2, 3, 1,True)(x0)
                        x2 = downscale(e_dims * 4, 3, 1,True)(x1)
                        x3 = downscale(e_dims * 8, 3, 1,True)(x2)
                        x3 = Dense(lowest_dense_res * lowest_dense_res * ae_dims)(x3)
                        x3 = Reshape((lowest_dense_res, lowest_dense_res, ae_dims))(x3)
                        x4 = upscale(ae_dims,True)(x3)
                        par_list=[x0,x2,x3,x4]



                        return x4
                    return func

декодерная часть

                def dec_flow(output_nc, d_ch_dims, add_residual_blocks=True):
                    dims = output_nc * d_ch_dims

                    def ResidualBlock(dim):
                        def func(inp):
                            x = Conv2D(dim, kernel_size=3, padding='same')(inp)
                            x = LeakyReLU(0.2)(x)
                            x = Conv2D(dim, kernel_size=3, padding='same')(x)
                            x = Add()([x, inp])
                            x = LeakyReLU(0.2)(x)
                            return x

                        return func


                    def func(inp): # input
                        print(type(inp))

                        x = upscale(dims * 8,True)(inp)
                        x = ResidualBlock(dims * 8)(x)
                        # x = Concatenate()([x,par_list[1]])
                        x = upscale(dims * 4,True)(x)
                        x = ResidualBlock(dims * 4)(x)
                        # x = Concatenate()([x,par_list[0]])
                        x = upscale(dims * 2,True)(x)
                        x = ResidualBlock(dims * 2)(x)

                        return Conv2D(output_nc, kernel_size=5, padding='same', activation='sigmoid')(x)

                    return func

при попытке получить сообщение об ошибке.

Graph disconnected: cannot obtain value for tensor Tensor("
input_1:0", shape=(?, 128, 128, 3), 
dtype=float32) at layer "input_1". The following previous layers were
 accessed without issue: ['input_2', 'conv2d_10', 'space_attention_5', 
'channel_attention_5', 'concatenate_5', 'conv2d_11', 'leaky_re_lu_6',
 'pixel_shuffler_2', 'conv2d_12', 'leaky_re_lu_7', 'conv2d_13', 'add_1',
 'leaky_re_lu_8', 'conv2d_14', 'space_attention_6', 'channel_attention_6',
 'concatenate_6', 'conv2d_15', 'leaky_re_lu_9', 'pixel_shuffler_3', 
'conv2d_16']

...