我有一个形状为(1,4,4,1)的张量,我想重复每个像素的值并将形状增加为(1,28,28,1)。我想在每个维度上重复一遍。例如,如果第一个像素为0,则生成形状为(28,28,1)且值为0的新张量,依此类推。我该怎么办?我感谢您的帮助。我需要类似下面的代码来选择索引i,j中wtm的值,然后生成具有该值和形状(1,28,28,1)的新张量。 假设wtm是:
0 1 1 0
0 0 0 1
1 0 1 0
1 1 0 1
现在我需要知道什么是wtm(i,j),然后使用该值生成一个新的张量。如果wtm(i,j)= 1 新张量是:
1 1 1 ... 1
1 1 1 ... 1
. ... 1
. ... 1
1 1 1 ... 1
wtm=Input((28,28,1))
image = Input((28, 28, 1))
conv1 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl1e',dilation_rate=(2,2))(image)
conv2 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl2e',dilation_rate=(2,2))(conv1)
conv3 = Conv2D(64, (5, 5), activation='relu', padding='same', name='convl3e',dilation_rate=(2,2))(conv2)
BN=BatchNormalization()(conv3)
encoded = Conv2D(1, (5, 5), activation='relu', padding='same',name='encoded_I',dilation_rate=(2,2))(BN)
#-----------------------adding w---------------------------------------
wfill=Kr.layers.Lambda(lambda x:tf.fill([28,28],x))
wtm_Fill=wfill(wtm(i,j))
add_const = Kr.layers.Lambda(lambda x: x[0] + x[1])
encoded_merged = add_const([encoded,wtm_Fill])
答案 0 :(得分:0)
也许tf.tile
适合。它仅复制张量定义次数的指定维。
array = np.random.random_integers(0,1, (1, 4, 4, 1))
tensor = tf.convert_to_tensor(array)
expanded_array = tf.tile(tensor, [1,7,7,1])
因此,如果输入数组的一维为[1,1,0,0]
,则在用tf.tile
填充后,它看起来像[1,1,0,0,1,1,0,0...]
,长度为28
编辑: TensorFlow支持numpy一样的张量索引。这样就可以切片张量
slice = tensor[0,:,:]
得到形状[4,4,1]
如果您只需要选择一个特定值,则可以使用tf.fill
代替tile
要从数组中获取特定值,您需要提供n个索引,其中n是维数。要获得3维数组中的第一个元素,例如(28,28,1),您需要array[0][0][0]
。