【问题标题】:Iterate a tensor in a for loop?在 for 循环中迭代张量?
【发布时间】:2017-05-02 20:44:36
【问题描述】:

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

【问题讨论】:

    标签: python keras tensor


    【解决方案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 个颜色通道

    【讨论】:

    • 我正在 keras 中构建我的模型,它位于 tensorflow 之上。我使用 lamdba 层在 keras 中定义一个层来执行这些操作..这就是我使用的功能..我不太确定我正在做的事情在 keras 或 tensorflow 框架中是否合法......它必须是适用于keras ..所以我想我在添加tensorflow标签时犯了一个错误。
    • 我不想训练它。我只想传递数据,因为它们通过 Conv1d 格式化然后输出。
    • 同样的原则适用,你需要定义你的图,然后使用sess.run(...)。如果您只是进行推理,则不会请求优化 OP,而是请求产生您感兴趣的结果的 OP。如果您不请求,Tensorflow 将知道不要打扰反向传播和优化返回值。如果您已经训练了模型,那么您将加载一个检查点,因此定义您的模型组件,加载检查点,然后不要触摸它并使用 sess.run 为模型提供数据
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多