操纵张量中的标量(Tensorflow)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操纵张量中的标量(Tensorflow)相关的知识,希望对你有一定的参考价值。

我想从张量中提取单个值并在保留反向传播的同时对其进行操作。我目前的实施:

import keras
from keras import backend as K
from keras.models import Model
from keras.layers import Dense, Activation,  Input
import tensorflow as tf

input = Input(shape=(100,1), dtype='float32')
x = Dense(100)(input)
x = Activation('relu')(x)
x = Dense(5)(x)
x = Activation('tanh')(x)

start_pad = 40.0 + 5.0 * x[0] # important line
# ...

zs = K.arange(0.0, 1000, step=1.0) 
zs = K.relu( zs - start_pad )
# ...

out = zs # + ...
out = Reshape( (trace_length,1) )(out)

model = Model(inputs = input, outputs = out)

然而,start_pad似乎是一个尺寸为x的张量。上面运行代码会出错:

ValueError:尺寸必须相等,但对于具有输入形状的“sub”(op:'Sub'),尺寸必须为1000和5:[1000],[100,5]。

其中start_pad对象是<tf.Tensor 'add_1:0' shape=(100, 5) dtype=float32>

我希望有start_pad的标量值和zs减去广播。我如何使用Tensorflow / Keras实现这一目标?

答案

好的,我找到的解决方案是

x = tf.unstack(x, axis=1)

返回tf张量列表

以上是关于操纵张量中的标量(Tensorflow)的主要内容,如果未能解决你的问题,请参考以下文章

《30天吃掉那只 TensorFlow2.0》 4-2 张量的数学运算

tensorflow——创建和操控张量

Tensorflow瞎搞

tensorflow2.0张量的结构操作

tensorflow

TensorFlow入门