Я вообще борюсь с тензорами индексации в тензорном потоке. У меня есть данные изображения и дополнительные скалярные данные. Я могу использовать только один заполнитель для ввода всех данных в нейронную сеть.
Изображения (img) представляют собой множество массивов с формой (84,84,3)
, и у меня есть данные a с формой (2)
и b с формой (1)
.
Сейчас создаю единый образец
sample = np.reshape(np.array([img,a,b]),(3,1)) #shape (3,1)
Заполнитель
input = tf.placeholder(dtype=tf.float32,shape=[None] + list(sample.shape))
Теперь, когда TF читает пакет образцов, я хотел бы получить пакет изображений, пакет a и пакет b, потому что они должны вводиться в разных местах нейронной сети.
Вот минимальный пример:
import tensorflow as tf
from tensorflow.contrib import layers
import numpy as np
#Numpy
img = np.random.rand(84,84,3)
a = np.random.rand(2)
b = np.random.rand(1)
sample = np.reshape(np.array([img,a,b]),(3,1)) #shape (3,1)
batch = np.repeat(np.expand_dims(sample,axis=0),32,axis=0) #shape (32,3,1)
#TF
input = tf.placeholder(dtype=tf.float32,shape=[None] + list(sample.shape))
#TODO:
tf_img = tf.#get image batch from input
tf_a = tf.#get a batch from input
tf_b = tf.#get b batch from input
out = layers.convolution2d(tf_img,num_outputs=64,kernel_size=8,stride=2,activation_fn=tf.nn.relu)
out = layers.flatten(out)
out = tf.concat([out,tf_a,tf_b])
out = layers.fully_connected(out,10,activation_fn=tf.nn.relu)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
_ = sess.run(out,feed_dict={input:batch})
Как я могу извлечь отдельные части входных данных из тензора с формой (?,3,1)
, использовать данные изображения для создания вложения и объединить две другие части в это выходное вложение.
Есть ли лучший способ ввести данные? Мое единственное ограничение - это должен быть единственный заполнитель.
(None, 84*84*3+2+1)
и использовать нарезка и изменение формы внутри графика. - person chrert   schedule 28.09.2017