Python 使用keras但得到错误AttributeError:';张量';对象没有属性'_keras#u历史';

Python 使用keras但得到错误AttributeError:';张量';对象没有属性'_keras#u历史';,python,tensorflow,keras,deep-learning,autoencoder,Python,Tensorflow,Keras,Deep Learning,Autoencoder,我目前正在使用keras实现自动编码器,以便对图像进行上采样 我想用相邻图像的信息来创建一个上采样的中心图像。垂直和水平邻域都应该共享编码器中的权重。在瓶颈处,将垂直和水平图像块连接起来并开始解码 代码如下: from keras.models import Model from keras.layers import Input, Concatenate from keras.layers import Conv3D, Conv3DTranspose, Conv2DTranspose from

我目前正在使用keras实现自动编码器,以便对图像进行上采样

我想用相邻图像的信息来创建一个上采样的中心图像。垂直和水平邻域都应该共享编码器中的权重。在瓶颈处,将垂直和水平图像块连接起来并开始解码

代码如下:

from keras.models import Model
from keras.layers import Input, Concatenate
from keras.layers import Conv3D, Conv3DTranspose, Conv2DTranspose
from keras.utils import np_utils
from keras import backend as K

# number of feature maps
L = 16
L0 = 24
L1 = 2*L #32
L2 = 4*L #64
L3 = 6*L #96
# input layers
input_LF_v = Input(shape=[5,12,12,3])
input_LF_h = Input(shape=[5,12,12,3])
# 5x12x12
# Encoding path
encoded_1 = Conv3D(L0,(3,3,3),strides=(1, 1, 1),input_shape=[5, 12, 12, 3], padding='SAME',data_format="channels_last")
encoded_2 = Conv3D(L0,(3,3,3),strides=(1, 1, 1),padding='SAME',data_format="channels_last")
encoded_3 = Conv3D(L1,(3,3,3),strides=(1, 2, 2),padding='SAME',data_format="channels_last")
# now 5x6x6
encoded_4 = Conv3D(L1,(3,3,3),strides=(1, 1, 1),padding='SAME',data_format="channels_last")
encoded_5 = Conv3D(L1,(3,3,3),strides=(1, 1, 1),padding='SAME',data_format="channels_last")
encoded_6 = Conv3D(L2,(3,3,3),strides=(1, 2, 2),padding='SAME',data_format="channels_last")
# now 5x3x3

encoded_v1 = encoded_1(input_LF_v)
encoded_v2 = encoded_2(encoded_v1)
encoded_v3 = encoded_3(encoded_v2)
encoded_v4 = encoded_4(encoded_v3)
encoded_v5 = encoded_5(encoded_v4)
encoded_v6 = encoded_6(encoded_v5)

encoded_h1 = encoded_1(input_LF_h)
encoded_h2 = encoded_2(encoded_h1)
encoded_h3 = encoded_3(encoded_h2)
encoded_h4 = encoded_4(encoded_h3)
encoded_h5 = encoded_5(encoded_h4)
encoded_h6 = encoded_6(encoded_h5)

# skip paths
encoded_vh2 = Concatenate()([encoded_v2,encoded_h2]) # 5x12x12x48
encoded_vh5 = Concatenate()([encoded_v5,encoded_h5]) # 5x6x6x64
# bottle neck of encoder
encoded_end = Concatenate()([encoded_v6,encoded_h6]) # 5x3x3x128
# print(encoded_vh2.shape)
# print(encoded_vh5.shape)
# print(encoded_end.shape)

# '''
# decoder starts here
decoded_6 = Conv3DTranspose(L3*2,(3,3,3),strides=(1, 1, 1),input_shape=[5, 3, 3, L3*2],padding='SAME',data_format="channels_last")(encoded_end)
decoded_5 = Conv3DTranspose(L3*2,(3,3,3),strides=(1, 1, 1),padding='SAME',data_format="channels_last")(decoded_6)
decoded_4 = Conv3DTranspose(L3,(3,3,3),strides=(1, 2, 2),padding='SAME',data_format="channels_last")(decoded_5)
# 5x6x6x64
decoded_vh4 = Concatenate()([decoded_4,encoded_vh5]) # 5x6x6x128
#
decoded_3 = Conv3DTranspose(L3*2,(3,3,3),strides=(1, 1, 1),padding='SAME',data_format="channels_last")(decoded_vh4)
decoded_2 = Conv3DTranspose(L3,(3,3,3),strides=(1, 1, 1),padding='SAME',data_format="channels_last")(decoded_3)
decoded_1 = Conv3DTranspose(L0*2,(3,3,3),strides=(1, 2, 2),padding='SAME',data_format="channels_last")(decoded_2)
# 5x12x12x48
decoded_vh1 = Concatenate()([decoded_1,encoded_vh2]) # 5x12x12x96
decoded_0 = Conv3DTranspose(L0*4,(3,3,3),strides=(1, 1, 1),padding='SAME',data_format="channels_last")(decoded_vh1)
decoded_00 = Conv3DTranspose(L0*2,(3,3,3),strides=(1, 1, 1),padding='SAME',data_format="channels_last")(decoded_0)
decoded_up1 = Conv3DTranspose(L0,(3,3,3),strides=(1, 2, 2),padding='SAME',data_format="channels_last")(decoded_00)
# 5x24x24x24
decoded_vh_up = Concatenate()([decoded_up1[:,0,:,:,:],decoded_up1[:,1,:,:,:],decoded_up1[:,2,:,:,:],decoded_up1[:,3,:,:,:],decoded_up1[:,4,:,:,:]])

# 24x24x120
decoded_vh_up0 = Conv2DTranspose(L0*5,(3,3),strides=    (1,1),padding='SAME',data_format="channels_last")(decoded_vh_up)
decoded_vh_up1 = Conv2DTranspose(L2,(3,3),strides=(1,1),padding='SAME',data_format="channels_last")(decoded_vh_up0)
decoded_vh_up2 = Conv2DTranspose(L1,(3,3),strides=(1,1),padding='SAME',data_format="channels_last")(decoded_vh_up1)
decoded_vh_up3 = Conv2DTranspose(L,(3,3),strides=(2,2),padding='SAME',data_format="channels_last")(decoded_vh_up2)
# 48x48x16
decoded_vh_up4 = Conv2DTranspose(L,(3,3),strides=(1,1),padding='SAME',data_format="channels_last")(decoded_vh_up3)
decoded_vh_up5 = Conv2DTranspose(3,(1,1),strides=(1,1),padding='SAME',data_format="channels_last")(decoded_vh_up4)
# 48x48x3

learning_rate = 0.0001
adam = keras.optimizers.Adam(lr=learning_rate)
batch = 20
epoch = 5000
SR_Autoencoder = Model(inputs=[input_LF_v, input_LF_h], outputs = decoded_vh_up5)

SR_Autoencoder.compile(optimizer = adam, loss = 'mse')

SR_Autoencoder.fit([stack_v,stack_h], cv, batch_size = batch, epochs = epoch, validation_split = 0.1, shuffle = True)
当我尝试运行它时,收到错误消息:

Using TensorFlow backend. Traceback (most recent call last): File "/home/z/PycharmProjects/SR/SR_keras.py", line 129, in SR_Autoencoder = Model(inputs=[input_LF_v, input_LF_h], outputs = decoded_vh_up5) File "/home/z/tensorflow/lib/python3.4/site-packages/keras/legacy/interfaces.py", line 91, in wrapper return func(*args, **kwargs) File "/home/z/tensorflow/lib/python3.4/site-packages/keras/engine/topology.py", line 1734, in __init__ build_map_of_graph(x, finished_nodes, nodes_in_progress) File "/home/z/tensorflow/lib/python3.4/site-packages/keras/engine/topology.py", line 1724, in build_map_of_graph layer, node_index, tensor_index) File "/home/z/tensorflow/lib/python3.4/site-packages/keras/engine/topology.py", line 1724, in build_map_of_graph layer, node_index, tensor_index) File "/home/z/tensorflow/lib/python3.4/site-packages/keras/engine/topology.py", line 1724, in build_map_of_graph layer, node_index, tensor_index) File "/home/z/tensorflow/lib/python3.4/site-packages/keras/engine/topology.py", line 1724, in build_map_of_graph layer, node_index, tensor_index) File "/home/z/tensorflow/lib/python3.4/site-packages/keras/engine/topology.py", line 1724, in build_map_of_graph layer, node_index, tensor_index) File "/home/z/tensorflow/lib/python3.4/site-packages/keras/engine/topology.py", line 1724, in build_map_of_graph layer, node_index, tensor_index) File "/home/z/tensorflow/lib/python3.4/site-packages/keras/engine/topology.py", line 1724, in build_map_of_graph layer, node_index, tensor_index) File "/home/z/tensorflow/lib/python3.4/site-packages/keras/engine/topology.py", line 1695, in build_map_of_graph layer, node_index, tensor_index = tensor._keras_history AttributeError: 'Tensor' object has no attribute '_keras_history' 使用TensorFlow后端。 回溯(最近一次呼叫最后一次): 文件“/home/z/PycharmProjects/SR/SR_keras.py”,第129行,在 SR_自动编码器=型号(输入=[输入低频v,输入低频h],输出=解码的高频up5) 文件“/home/z/tensorflow/lib/python3.4/site packages/keras/legacy/interfaces.py”,第91行,在包装器中 返回函数(*args,**kwargs) 文件“/home/z/tensorflow/lib/python3.4/site packages/keras/engine/topology.py”,第1734行,在__ 构建图的图(x、完成的节点、进行中的节点) 文件“/home/z/tensorflow/lib/python3.4/site packages/keras/engine/topology.py”,第1724行,在图的构建图中 层、节点索引、张量索引) 文件“/home/z/tensorflow/lib/python3.4/site packages/keras/engine/topology.py”,第1724行,在图的构建图中 层、节点索引、张量索引) 文件“/home/z/tensorflow/lib/python3.4/site packages/keras/engine/topology.py”,第1724行,在图的构建图中 层、节点索引、张量索引) 文件“/home/z/tensorflow/lib/python3.4/site packages/keras/engine/topology.py”,第1724行,在图的构建图中 层、节点索引、张量索引) 文件“/home/z/tensorflow/lib/python3.4/site packages/keras/engine/topology.py”,第1724行,在图的构建图中 层、节点索引、张量索引) 文件“/home/z/tensorflow/lib/python3.4/site packages/keras/engine/topology.py”,第1724行,在图的构建图中 层、节点索引、张量索引) 文件“/home/z/tensorflow/lib/python3.4/site packages/keras/engine/topology.py”,第1724行,在图的构建图中 层、节点索引、张量索引) 文件“/home/z/tensorflow/lib/python3.4/site packages/keras/engine/topology.py”,第1695行,在图的内部构建图中 层,节点索引,张量索引=张量 AttributeError:“Tensor”对象没有属性“\u keras\u history” 我在stackoverflow上搜索了一些答案,但我找不到任何不是keras层的层

谁能告诉我哪里错了吗


提前谢谢

每个操作都必须由“keras层”执行,不可能在其外部进行操作

decoded_vh_up = Lambda(lambda x: K.concatenate(
    [x[:,0,:,:,:],x[:,1,:,:,:],x[:,2,:,:,:],x[:,3,:,:,:],x[:,4,:,:,:]]
))(decoded_up1)

显然这里有人有办法。当然可以,但我已经检查了我的代码,只有keras层,没有其他操作。我也是使用keras的初学者。此时此刻,我找不到这里提到的任何类似的错误。