如何在for循环中迭代张量?..
我想对input_tensor的每一行进行卷积...但似乎无法在张量中迭代。
目前尝试这样:
def row_convolution(input):
filter_size = 8
print input.dtype
print input.get_shape()
for units in xrange(splits):
extract = input[units:units+filter_size,:,:]
for row_of_extract in extract:
for unit in row_of_extract:
temp_list.append((Conv1D(filters = 1, kernel_size = 1, activation='relu' , name = 'conv')(unit)))
print len(temp_list)
sum_temp_list.append(sum(temp_list))
sum_sum_temp_list.append(sum(sum_temp_list))
conv_feature_map.append(sum_sum_temp_list)
return np.array(conv_feature_map)
答案 0 :(得分:1)
看起来您正在尝试为每个输入定义tensorflow操作。这是对框架的常见误解。
您必须先定义要执行的操作,必须事先定义所有操作。通常它看起来像这样:
g = tf.Graph()
with g.as_default():
# define some placeholders to accept your input
X = tf.placeholder(tf.float32, shape=[1000,1])
y = tf.placeholder(tf.float32, shape=[1])
# add more operations...
Conv1D(...) # add your convolution operations
# add the rest of your operations
optimizer = tf.train.AdamOptimizer(0.00001).minimize(loss)
现在已经定义了所有图表。考虑到修复,你不会再添加任何东西。
现在,您将通过固定图表运行数据:
with g.as_default(), tf.Session() as sess:
X_data, y_data = get_my_data()
# run this in a loop
result = sess.run([optimizer,loss], feed_dict={X:X_data, y:y_data})
请注意,您的数据和标签应批量投放,因此数据的第一维代表N个数据点(N = 1当然是完全可以接受的)。您应该预处理数据,使其采用该格式。例如,一批10个MNIST数字的形状为[10,28,28,1]
。那是: