gpt4 book ai didi

python - 基于变量的Tensorflow切片

转载 作者:太空狗 更新时间:2023-10-29 17:44:43 24 4
gpt4 key购买 nike

我发现索引在 tensorflow 中仍然是一个悬而未决的问题 (#206) ,所以我想知道我现在可以使用什么作为解决方法。我想根据随每个训练示例而变化的变量对矩阵的行/列进行索引/切片。

到目前为止我尝试了什么:

  1. 基于占位符的切片(不起作用)

以下(工作)代码片段基于固定数字。

import tensorflow as tf
import numpy as np

x = tf.placeholder("float")
y = tf.slice(x,[0],[1])

#initialize
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

#run
result = sess.run(y, feed_dict={x:[1,2,3,4,5]})
print(result)

但是,我似乎不能简单地将其中一个固定数字替换为 tf.placeholder。以下代码给出了错误“TypeError: List of Tensors when single Tensor expected.”

import tensorflow as tf
import numpy as np

x = tf.placeholder("float")
i = tf.placeholder("int32")
y = tf.slice(x,[i],[1])

#initialize
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

#run
result = sess.run(y, feed_dict={x:[1,2,3,4,5],i:0})
print(result)

这听起来像是 [i] 周围的括号太多了,但删除它们也无济于事。如何使用占位符/变量作为索引?

  1. 基于 python 变量的切片(不能正确地反向传播/更新)

我也试过使用普通的 python 变量作为索引。这不会导致错误,但网络在训练时不会学到任何东西。我想是因为变化的变量没有正确注册,图形格式不正确并且更新不起作用?

  1. 通过 one-hot vector + 乘法切片(有效,但速度慢)

我发现的一种解决方法是使用单热向量。在 numpy 中制作一个单热向量,使用占位符传递它,然后通过矩阵乘法进行切片。这有效,但速度很慢。

关于如何根据变量高效地切片/索引有什么想法吗?

最佳答案

基于占位符的切片应该可以正常工作。由于形状和类型的一些细微问题,您似乎遇到了类型错误。如果您有以下内容:

x = tf.placeholder("float")
i = tf.placeholder("int32")
y = tf.slice(x,[i],[1])

...你应该改为:

x = tf.placeholder("float")
i = tf.placeholder("int32")
y = tf.slice(x,i,[1])

...然后您应该在调用 sess.run() 时将 i 作为 [0] 提供。

为了更清楚一点,我建议重写代码如下:

import tensorflow as tf
import numpy as np

x = tf.placeholder(tf.float32, shape=[None]) # 1-D tensor
i = tf.placeholder(tf.int32, shape=[1])
y = tf.slice(x, i, [1])

#initialize
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)

#run
result = sess.run(y, feed_dict={x: [1, 2, 3, 4, 5], i: [0]})
print(result)

tf.placeholder op 的附加 shape 参数有助于确保您提供的值具有适当的形状,并且如果形状不正确。

关于python - 基于变量的Tensorflow切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34002591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com