如何在图构建时获取张量(在 TensorFlow 中)的维度?
How to get the dimensions of a tensor (in TensorFlow) at graph construction time?
我正在尝试一个未按预期运行的操作。
graph = tf.Graph()
with graph.as_default():
train_dataset = tf.placeholder(tf.int32, shape=[128, 2])
embeddings = tf.Variable(
tf.random_uniform([50000, 64], -1.0, 1.0))
embed = tf.nn.embedding_lookup(embeddings, train_dataset)
embed = tf.reduce_sum(embed, reduction_indices=0)
所以我需要知道张量的维度embed
。我知道它可以在 运行 时间完成,但对于这样一个简单的操作来说,工作量太大了。更简单的方法是什么?
Tensor.get_shape()
来自 .
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
print(c.get_shape())
==> TensorShape([Dimension(2), Dimension(3)])
不用运行:
构造图(ops)后打印出embed
import tensorflow as tf
...
train_dataset = tf.placeholder(tf.int32, shape=[128, 2])
embeddings = tf.Variable(
tf.random_uniform([50000, 64], -1.0, 1.0))
embed = tf.nn.embedding_lookup(embeddings, train_dataset)
print (embed)
这将显示嵌入张量的形状:
Tensor("embedding_lookup:0", shape=(128, 2, 64), dtype=float32)
通常,最好在训练模型之前检查所有张量的形状。
访问值的函数:
def shape(tensor):
s = tensor.get_shape()
return tuple([s[i].value for i in range(0, len(s))])
示例:
batch_size, num_feats = shape(logits)
我看到大多数人对 tf.shape(tensor)
和 tensor.get_shape()
感到困惑
让我们说清楚:
tf.shape
tf.shape
用于动态形状。如果您的张量形状 可变 ,请使用它。
举个例子:输入是一张宽度和高度可变的图像,我们想将它的大小调整为原来的一半,那么我们可以这样写:
new_height = tf.shape(image)[0] / 2
tensor.get_shape
tensor.get_shape
用于固定形状,这意味着张量的形状可以推导出在图中。
结论:
tf.shape
几乎可以在任何地方使用,但 t.get_shape
仅适用于可以从图形中推导出的形状。
让我们把它变得非常简单。如果你想要像 2, 3, 4, etc.,
这样的维数的单个数字,那么只需使用 tf.rank()
。但是,如果您想要张量的确切形状,请使用 tensor.get_shape()
with tf.Session() as sess:
arr = tf.random_normal(shape=(10, 32, 32, 128))
a = tf.random_gamma(shape=(3, 3, 1), alpha=0.1)
print(sess.run([tf.rank(arr), tf.rank(a)]))
print(arr.get_shape(), ", ", a.get_shape())
# for tf.rank()
[4, 3]
# for tf.get_shape()
Output: (10, 32, 32, 128) , (3, 3, 1)
方法tf.shape是一个TensorFlow静态方法。但是,对于Tensorclass,也有方法get_shape。见
https://www.tensorflow.org/api_docs/python/tf/Tensor#get_shape
使用 tf.constant()
在 tensorflow 中创建张量
这是导入库
import tensorflow as tf
这将创建张量
tensor = tf.constant([[[2,4,5], [5,6,6]], [[9,7,8], [4,8,2]], [[7,1,3], [4,8,9]]])
这将显示张量
tensor
这将显示维数
tensor.ndim
#创建张量
tensor = tf.constant([[[1, 2, 3],
[3, 4, 5]],
[[5, 6, 7],
[8, 6, 9]],
[[2, 1, 5],
[5, 7, 8]]])
tensor
#显示结果
<tf.Tensor: shape=(3, 2, 3), dtype=int32, numpy= array([[[1, 2, 3],[3, 4, 5]],
[[5, 6, 7],
[8, 6, 9]],
[[2, 1, 5],
[5, 7, 8]]], dtype=int32)>
我正在尝试一个未按预期运行的操作。
graph = tf.Graph()
with graph.as_default():
train_dataset = tf.placeholder(tf.int32, shape=[128, 2])
embeddings = tf.Variable(
tf.random_uniform([50000, 64], -1.0, 1.0))
embed = tf.nn.embedding_lookup(embeddings, train_dataset)
embed = tf.reduce_sum(embed, reduction_indices=0)
所以我需要知道张量的维度embed
。我知道它可以在 运行 时间完成,但对于这样一个简单的操作来说,工作量太大了。更简单的方法是什么?
Tensor.get_shape()
来自
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
print(c.get_shape())
==> TensorShape([Dimension(2), Dimension(3)])
不用运行:
构造图(ops)后打印出embedimport tensorflow as tf
...
train_dataset = tf.placeholder(tf.int32, shape=[128, 2])
embeddings = tf.Variable(
tf.random_uniform([50000, 64], -1.0, 1.0))
embed = tf.nn.embedding_lookup(embeddings, train_dataset)
print (embed)
这将显示嵌入张量的形状:
Tensor("embedding_lookup:0", shape=(128, 2, 64), dtype=float32)
通常,最好在训练模型之前检查所有张量的形状。
访问值的函数:
def shape(tensor):
s = tensor.get_shape()
return tuple([s[i].value for i in range(0, len(s))])
示例:
batch_size, num_feats = shape(logits)
我看到大多数人对 tf.shape(tensor)
和 tensor.get_shape()
感到困惑
让我们说清楚:
tf.shape
tf.shape
用于动态形状。如果您的张量形状 可变 ,请使用它。
举个例子:输入是一张宽度和高度可变的图像,我们想将它的大小调整为原来的一半,那么我们可以这样写:
new_height = tf.shape(image)[0] / 2
tensor.get_shape
tensor.get_shape
用于固定形状,这意味着张量的形状可以推导出在图中。
结论:
tf.shape
几乎可以在任何地方使用,但 t.get_shape
仅适用于可以从图形中推导出的形状。
让我们把它变得非常简单。如果你想要像 2, 3, 4, etc.,
这样的维数的单个数字,那么只需使用 tf.rank()
。但是,如果您想要张量的确切形状,请使用 tensor.get_shape()
with tf.Session() as sess:
arr = tf.random_normal(shape=(10, 32, 32, 128))
a = tf.random_gamma(shape=(3, 3, 1), alpha=0.1)
print(sess.run([tf.rank(arr), tf.rank(a)]))
print(arr.get_shape(), ", ", a.get_shape())
# for tf.rank()
[4, 3]
# for tf.get_shape()
Output: (10, 32, 32, 128) , (3, 3, 1)
方法tf.shape是一个TensorFlow静态方法。但是,对于Tensorclass,也有方法get_shape。见
https://www.tensorflow.org/api_docs/python/tf/Tensor#get_shape
使用 tf.constant()
在 tensorflow 中创建张量这是导入库
import tensorflow as tf
这将创建张量
tensor = tf.constant([[[2,4,5], [5,6,6]], [[9,7,8], [4,8,2]], [[7,1,3], [4,8,9]]])
这将显示张量
tensor
这将显示维数
tensor.ndim
#创建张量
tensor = tf.constant([[[1, 2, 3],
[3, 4, 5]],
[[5, 6, 7],
[8, 6, 9]],
[[2, 1, 5],
[5, 7, 8]]])
tensor
#显示结果
<tf.Tensor: shape=(3, 2, 3), dtype=int32, numpy= array([[[1, 2, 3],[3, 4, 5]],
[[5, 6, 7],
[8, 6, 9]],
[[2, 1, 5],
[5, 7, 8]]], dtype=int32)>