0

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

1 回答 1

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 数字将是 shape [10,28,28,1]。那是:

  • 10个数据样本
  • 图像高度为 28 像素
  • 图片宽度为 28 像素
  • 这是一个灰度图像,所以 1 个颜色通道
于 2017-05-02T22:15:32.267 回答