张量奇怪

时间:2019-09-10 12:46:21

标签: tensorflow keras tensor

当我打印张量并且显示某种操作名称而不是其值时是什么意思?

例如:

Tensor("gradients/block1_conv1/convolution_grad/Conv2DBackpropInput:0", shape=(?, ?, ?, 3), dtype=float32)
Tensor("truediv_1:0", shape=(?, ?, ?, 3), dtype=float32)

产生这些印刷品的代码是:

from keras.applications import VGG16
from keras import backend as K

model = VGG16(weights='imagenet',
              include_top=False)

layer_name = 'block3_conv1'
filter_index = 0

layer_output = model.get_layer(layer_name).output
loss = K.mean(layer_output[:, :, :, filter_index])

# The call to `gradients` returns a list of tensors (of size 1 in this case)
# hence we only keep the first element -- which is a tensor.
grads = K.gradients(loss, model.input)[0]


print("Print 1:")
print(grads)
print(type(grads))

# We add 1e-5 before dividing so as to avoid accidentally dividing by 0.
grads /= (K.sqrt(K.mean(K.square(grads))) + 1e-5)
grads /= (K.sqrt(K.mean(K.square(grads))) + 1e-5)
print("Print 2:")
print(grads)
print(type(grads))

根据文档,张量没有值,但是意味着在给定的CPU或GPU会话中达到最终值。至少据我了解。

这真的是什么意思吗?

如何列出张量内的所有操作(如按顺序方式),这些操作会将我从输入中带到最终值?

例如。 grads张量将是一个梯度函数和两个除法来计算最终值。

1 个答案:

答案 0 :(得分:1)

Keras / Tensorflow(处于急切模式时除外,但我认为Keras不支持急切模式)是一种“符号图”语言。

创建模型及其操作时,您只是在创建一个“图形”,而不是操作本身。然后你只有张量。

Keras模型具有“输入张量”,在Tensorflow中为“占位符”。它们是特殊的张量,在训练或预测时“将”获得值。 (在Keras中:mean-sdmodel.fitmodel.predict等,在Tensorflow中,model.evaluate

下面是一个示例,该示例如何为输入提供数据并获取渐变的实际值:Getting gradient of model output w.r.t weights using Keras