当我打印张量并且显示某种操作名称而不是其值时是什么意思?
例如:
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
张量将是一个梯度函数和两个除法来计算最终值。
答案 0 :(得分:1)
Keras / Tensorflow(处于急切模式时除外,但我认为Keras不支持急切模式)是一种“符号图”语言。
创建模型及其操作时,您只是在创建一个“图形”,而不是操作本身。然后你只有张量。
Keras模型具有“输入张量”,在Tensorflow中为“占位符”。它们是特殊的张量,在训练或预测时“将”获得值。 (在Keras中:mean-sd
,model.fit
,model.predict
等,在Tensorflow中,model.evaluate
)
下面是一个示例,该示例如何为输入提供数据并获取渐变的实际值:Getting gradient of model output w.r.t weights using Keras