And*_*oti 11 python numpy empty-list tensorflow
Numpy 有这个辅助函数np.empty,它将:
返回给定形状和类型的新数组,而不初始化条目。
当我想使用tf.concat创建张量时,我发现它非常有用,因为:
输入张量的维数必须匹配,除axis之外的所有维数必须相等。
因此,从一个具有预期形状的空张量开始会派上用场。有没有办法在张量流中实现这一点?
[编辑]
为什么我想要这个的简化示例
netInput = np.empty([0, 4])
netTarget = np.empty([0, 4])
inputWidth = 2
for step in range(data.shape.as_list()[-2]-frames_width-1):
netInput = tf.concat([netInput, data[0, step:step + frames_width, :]], -2)
target = tf.concat([target, data[0, step + frames_width + 1:step + frames_width + 2, :]], -2)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,如果 netInput 或 netTarget 被初始化,我将把一个额外的例子与该初始化连接起来。并用第一个值初始化它们,我需要破解循环。没什么市长,我只是想知道是否有一种“tensorflow”的方式来解决这个问题。
如果你要创建一个空张量,tf.zeros就可以
>>> a = tf.zeros([0, 4])
>>> tf.concat([a, [[1, 2, 3, 4], [5, 6, 7, 8]]], axis=0)
<tf.Tensor: shape=(2, 4), dtype=float32, numpy=
array([[1., 2., 3., 4.],
[5., 6., 7., 8.]], dtype=float32)>
Run Code Online (Sandbox Code Playgroud)
在《TF 2》中,
tensor = tf.reshape(tf.convert_to_tensor(()), (0, n))
Run Code Online (Sandbox Code Playgroud)
为我工作。
您可以做的最接近的事情是创建一个不初始化的变量。如果您使用tf.global_variables_initializer()初始化变量,请通过设置在初始化期间禁用将变量放入全局变量列表中collections=[]。
例如,
import numpy as np
import tensorflow as tf
x = tf.Variable(np.empty((2, 3), dtype=np.float32), collections=[])
y = tf.Variable(np.empty((2, 3), dtype=np.float32))
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
# y has been initialized with the content of "np.empty"
y.eval()
# x is not initialized, you have to do it yourself later
x.eval()
Run Code Online (Sandbox Code Playgroud)
这里np.empty提供x只是为了指定其形状和类型,而不是用于初始化。
现在,对于诸如 之类的操作tf.concat,您实际上没有(实际上不能)自己管理内存——您无法像某些numpy函数允许的那样预分配输出。Tensorflow 已经管理内存并执行一些聪明的技巧,例如如果检测到可以这样做,则将内存块重新用于输出。
| 归档时间: |
|
| 查看次数: |
18765 次 |
| 最近记录: |