我正在尝试编写一个鉴别器来评估图像的补丁。因此,我从输入生成32x32非重叠的面片,然后将它们连接到一个新的轴上。
我使用时间分布层的原因是,最终,鉴别器应该评估整个图像是真是假。因此,我尝试分别在每个补丁上执行前向传递,然后通过lambda层对补丁上的鉴别器输出进行平均:
def my_average(x):
x = K.mean(x, axis=1)
return x
def my_average_shape(input_shape):
shape = list(input_shape)
del shape[1]
return tuple(shape)
def defineD(input_shape):
a = Input(shape=(256, 256, 1))
cropping_list = []
n_patches = 256/32
for x in range(256/32):
for y in range(256/32):
cropping_list += [
K.expand_dims(
Cropping2D((( x * 32, 256 - (x+1) * 32), ( y * 32, 256 - (y+1) * 32)))(a)
, axis=1)
]
x = Concatenate(1)(cropping_list)
x = TimeDistributed(Conv2D(4 * 8, 3, padding='same'))(x) #
x = TimeDistributed(MaxPooling2D())(x)
x = TimeDistributed(LeakyReLU())(x) # 16
x = TimeDistributed(Conv2D(4 * 16, 3, padding='same'))(x)
x = TimeDistributed(MaxPooling2D())(x)
x = TimeDistributed(LeakyReLU())(x) # 8
x = TimeDistributed(Conv2D(4 * 32, 3, padding='same'))(x)
x = TimeDistributed(MaxPooling2D())(x)
x = TimeDistributed(LeakyReLU())(x) # 4
x = TimeDistributed(Flatten())(x)
x = TimeDistributed(Dense(2, activation='sigmoid'))(x)
x = Lambda(my_average, my_average_shape)(x)
return keras.models.Model(inputs=a, outputs=x)由于某种原因,我得到以下错误:
File "testing.py", line 41, in <module>
defineD((256,256,1) )
File "testing.py", line 38, in defineD
return keras.models.Model(inputs=a, outputs=x)
File "/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 93, in __init__
self._init_graph_network(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 237, in _init_graph_network
self.inputs, self.outputs)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1353, in _map_graph_network
tensor_index=tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1340, in build_map
node_index, tensor_index)
File "/usr/local/lib/python2.7/dist-packages/keras/engine/network.py", line 1312, in build_map
node = layer._inbound_nodes[node_index]
AttributeError: 'NoneType' object has no attribute '_inbound_nodes'发布于 2018-08-22 17:28:05
您需要将裁剪操作放在一个函数中,然后在Lambda层中使用该函数:
def my_cropping(a):
cropping_list = []
n_patches = 256/32
for x in range(256//32):
for y in range(256//32):
cropping_list += [
K.expand_dims(
Cropping2D((( x * 32, 256 - (x+1) * 32), ( y * 32, 256 - (y+1) * 32)))(a)
, axis=1)
]
return cropping_list要使用它:
cropping_list = Lambda(my_cropping)(a)发布于 2019-01-17 17:49:33
我遇到了同样的问题,它确实通过在张量周围包裹一个Lambda层来解决,就像@today提议的那样。
谢谢你的提示,它给我指明了正确的方向。我想把一个向量变成一个对角矩阵
我想要将一个向量与一个正方形图像连接起来,并将该向量转换为一个诊断矩阵。它与以下代码片段一起工作:
def diagonalize(vector):
diagonalized = tf.matrix_diag(vector) # make diagonal matrix from vector
out_singlechan = tf.expand_dims(diagonalized, -1) # append 1 channel to get compatible to the multichannel image dim
return out_singlechan
lstm_out = Lambda(diagonalize, output_shape=(self.img_shape[0],self.img_shape[1],1))(lstm_out)https://stackoverflow.com/questions/51963377
复制相似问题