создать тензор с большей формой с каждым значением тензора с меньшей формой - PullRequest
0 голосов
/ 20 марта 2019

У меня есть тензор с формой (1,4,4,1), и я хочу повторить значение каждого его пикселя и увеличивает форму до (1,28,28,1).Я хочу повторить это в каждом измерении.например, если его первый пиксель равен 0, тогда создадим новый тензор с формой (28,28,1) со значением 0 и так далее.как я могу это сделать?Я ценю вашу помощь.Мне нужно что-то вроде кода ниже, чтобы выбрать значение wtm в индексе i, j, а затем создать новый тензор с этим значением и формой (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])

1 Ответ

0 голосов
/ 20 марта 2019

Может быть 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].

https://www.tensorflow.org/api_docs/python/tf/tile

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...