在for循环中迭代张量?

时间:2017-05-02 20:44:36

标签: python keras tensor

如何在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)

1 个答案:

答案 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]。那是:

  • 10个数据样本
  • 图像高度为28像素
  • 图片宽度为28像素
  • 这是一个灰度图像,所以1色通道