如何为keras DL训练放置多个输出?

时间:2019-12-09 07:31:13

标签: python tensorflow keras

我想建立一个使用多个输出的网络。  例如,我要输入形状为的list的输入:  [8,128,128,3]  这里,8是一组输入中的图像数,128 x 128 x 3是彩色图像的形状。  我希望我的输出是:  [8,128,128]  这里,8是一组输出中的图像数,128 x 128是灰色图像的形状。

所以我将代码编写如下:

f_list = []
for i in range(v):
    img_in = M.Input((h, w, 3))  # Input :
    feature = spm.encoder(img_in)
    f_list.append(feature)
fuse_ave,fuse_max,fuse_min = spm.fusion(f_list)
decode_list = []
for i in range(v):
    ffuse = spm.decoder(f_list[i],fuse_ave,fuse_max)
    decode_list.append(ffuse)
dl_con = L.concatenate(decode_list,0)
print(dl_con.shape)
epsnet = M.Model(inputs = img_in,outputs = dl_con)
epsnet.compile(optimizer=O.Adam(lr=0.0001,decay = 0.000001), loss='mean_squared_error', metrics=['accuracy'])
epsnet.fit(iml,np.array(gml),batch_size = 5, epochs=50,verbose=1,shuffle=True, validation_split=0.1)

这里,函数解码如下:

def decoder(input,fuse_a,fuse_M):    #input : encoded
    infu = L.Concatenate(-1)([input,fuse_a,fuse_M])
    f=128
    x = L.Conv2DTranspose(filters = f,kernel_size=(5,5),strides=2,padding = 'same')(infu)   dding = 'same')(x__)

          ...

    x__ = L.BatchNormalization()(x__)
    x__ = L.Activation('relu')(x__)
    def sq(x):
        x_sq = B.squeeze(x,-1)
        return x_sq
    xq = L.Lambda(sq)(x__)
    return xq

我在这里收到错误消息:

 ValueError: Output tensors to a Model must be the output of a TensorFlow `Layer` (thus holding past layer metadata). Found: Tensor("concatenate_7/concat:0", shape=(?, ?, ?), dtype=float32)

我尝试了几种方法,但仍然收到相同的错误消息。请给我一个突破,非常感谢。

0 个答案:

没有答案