【发布时间】:2019-03-21 17:23:17
【问题描述】:
我有一个输入层wtm=Input(4,4,1),我想在学习期间访问该层的每个值。用于访问wtm[1,1](行=1 和列=1 中的值)我使用此代码a=Kr.layers.Lambda(lambda x:x[1,1])(wtm) 但输出形状为TensorShape([Dimension(4), Dimension(1)]) 而不是(1,1),我认为它给出了第一列。是吗对?如果我只需要特定行和列中的一个值,我应该怎么做以及如何更改它?我真的需要你的帮助。我知道这可能很容易,但我是初学者,不知道如何解决这个问题:(
编辑:
假设
wtm=
1 0 0 1
1 1 1 0
1 0 1 0
1 0 1 1
我们知道 wtm(0,0)=1 现在我想用 shape (28,28,1) 生成值为 1 的新张量,我想对 wtm 中的所有值执行此操作。
wtm=Input((4,4,1))
image = Input((28, 28, 1))
conv1 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl1e')(image)
conv2 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl2e')(conv1)
conv3 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl3e')(conv2)
BN=BatchNormalization()(conv3)
encoded = Conv2D(1, (5, 5), activation='relu', padding='same',name='encoded_I')(BN)
rep=Kr.layers.Lambda(lambda x:Kr.backend.repeat(x,28))
a=rep(Kr.layers.Lambda(lambda x:x[1,1])(wtm))
add_const = Kr.layers.Lambda(lambda x: x[0] + x[1])
encoded_merged = add_const([encoded,a])
#-----------------------decoder------------------------------------------------
#------------------------------------------------------------------------------
deconv1 = Conv2D(64, (5, 5), activation='elu', padding='same', name='convl1d')(encoded_merged)
deconv2 = Conv2D(64, (5, 5), activation='elu', padding='same', name='convl2d')(deconv1)
deconv3 = Conv2D(64, (5, 5), activation='elu',padding='same', name='convl3d')(deconv2)
deconv4 = Conv2D(64, (5, 5), activation='elu',padding='same', name='convl4d')(deconv3)
BNd=BatchNormalization()(deconv4)
#DrO2=Dropout(0.25,name='DrO2')(BNd)
decoded = Conv2D(1, (5, 5), activation='sigmoid', padding='same', name='decoder_output')(BNd)
#model=Model(inputs=image,outputs=decoded)
model=Model(inputs=[image,wtm],outputs=decoded)
decoded_noise = GaussianNoise(0.5)(decoded)
#----------------------w extraction------------------------------------
convw1 = Conv2D(64, (5,5), activation='relu', name='conl1w')(decoded_noise)#24
convw2 = Conv2D(64, (5,5), activation='relu', name='convl2w')(convw1)#20
#Avw1=AveragePooling2D(pool_size=(2,2))(convw2)
convw3 = Conv2D(64, (5,5), activation='relu' ,name='conl3w')(convw2)#16
convw4 = Conv2D(64, (5,5), activation='relu' ,name='conl4w')(convw3)#12
#Avw2=AveragePooling2D(pool_size=(2,2))(convw4)
convw5 = Conv2D(64, (5,5), activation='relu', name='conl5w')(convw4)#8
convw6 = Conv2D(64, (5,5), activation='relu', name='conl6w')(convw5)#4
convw7 = Conv2D(64, (5,5), activation='relu',padding='same', name='conl7w',dilation_rate=(2,2))(convw6)#4
convw8 = Conv2D(64, (5,5), activation='relu', padding='same',name='conl8w',dilation_rate=(2,2))(convw7)#4
convw9 = Conv2D(64, (5,5), activation='relu',padding='same', name='conl9w',dilation_rate=(2,2))(convw8)#4
convw10 = Conv2D(64, (5,5), activation='relu',padding='same', name='conl10w',dilation_rate=(2,2))(convw9)#4
BNed=BatchNormalization()(convw10)
pred_w = Conv2D(1, (1, 1), activation='sigmoid', padding='same', name='reconstructed_W',dilation_rate=(2,2))(BNed)
w_extraction=Model(inputs=[image,wtm],outputs=[decoded,pred_w])
w_extraction.summary()
【问题讨论】:
-
你能告诉我们你迄今为止尝试过的minimal reproducible example吗?
-
我把完整的代码放在上面,但我的问题是我之前说的部分,我不知道我可以访问张量中的每个值吗?
-
为什么这段代码 Kr.layers.Lambda(lambda x:x[1,1])(wtm) 的输出形状是 (4,1)?我认为应该是(1,1)。有什么问题?
-
您能否创建一个较小的示例来说明您要完成的工作?从您的长代码 sn-p 中很难看出您到底在问什么。另外,请包含所有必要的导入语句,以便我们可以在我们自己的系统上运行代码。
-
我添加了一个示例来说明我需要什么。