Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在keras中操作可训练的张量乘法运算?_Python_Tensorflow_Keras - Fatal编程技术网

Python 如何在keras中操作可训练的张量乘法运算?

Python 如何在keras中操作可训练的张量乘法运算?,python,tensorflow,keras,Python,Tensorflow,Keras,我倾向于建立一个模型,模型的一个输入是一个张量,形状是?,29?,64。 这是我的模型代码中的定义: 历史主题=Inputshape=29,64,名称='history' 然后我把它转换成一个新的张量,形状是?,64,29 历史主题转换=Lambdalambda x: K.tf.transposex,perm=[0,2,1]历史主题 在那之后,我想初始化一个新的可训练张量,叫做da,形状为5,64,然后将da乘以history\u topics\u trans得到 一个新的张量,形状为?,5,2

我倾向于建立一个模型,模型的一个输入是一个张量,形状是?,29?,64。 这是我的模型代码中的定义:

历史主题=Inputshape=29,64,名称='history'

然后我把它转换成一个新的张量,形状是?,64,29

历史主题转换=Lambdalambda x: K.tf.transposex,perm=[0,2,1]历史主题

在那之后,我想初始化一个新的可训练张量,叫做da,形状为5,64,然后将da乘以history\u topics\u trans得到 一个新的张量,形状为?,5,29

那么如何实现呢?谢谢。

您可以简单地使用一个致密层。如果不需要偏差项,可以将use_bias设置为False

导入tensorflow作为tf 从tensorflow进口keras K=keras.backend history\u topics=keras.layers.Inputshape=29,64,name='history' 历史主题项目=keras.layers.Dense5,使用偏见=虚假历史主题 历史主题转换=keras.layers.Lambda lambda x:tf.transposex,perm=[0,2,1]历史主题项目 model=keras.models.model输入=[history\u topics],输出=[history\u topics\u trans] 范文摘要 以下是输出:

Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
history (InputLayer)         [(None, 29, 64)]          0
_________________________________________________________________
dense_2 (Dense)              (None, 29, 5)             320
_________________________________________________________________
lambda_2 (Lambda)            (None, 5, 29)             0
=================================================================
Total params: 320
Trainable params: 320
Non-trainable params: 0
_________________________________________________________________
可以看到密集层的权重,如下所示:

dense_layer = keras.layers.Dense(5, use_bias=False)
... # use the layer, so its weights get constructed
[weights] = dense_layer.get_weights()
如果您想要偏差术语,请不要将use_bias设置为False。在这种情况下,get_weights将返回权重矩阵和偏差向量:

dense_layer = keras.layers.Dense(5)
... # use the layer, so its weights get constructed
[weights, bias] = dense_layer.get_weights()
Keras层在第一次实际使用时是惰性构建的。如果在构建权重之前尝试获取权重,则会得到一个空列表。要强制创建权重,可以对某些数据调用层,或者直接调用build方法:

密集的_层。buildinput_形状=[None,None,64] 请注意,input_shape参数应称为batch_input_shape,因为它包含输入的完整形状,包括批次维度

get_weights方法返回一个NumPy数组。如果希望获得符号张量,例如直接使用模型中的权重,则应使用变量实例变量:

>>> dense_layer.variables
[<tf.Variable 'kernel_5:0' shape=(64, 5) dtype=float32>]

欢迎来到陈亚南!谢谢历史主题,使用bias=False,name='proj'历史主题名为'proj'的致密层的形状是什么,它是形状为64,5的张量吗?Hi Yanan。层本身没有形状。它是一个包含零个或多个权重的对象,每个权重都有一个形状。密集层在这种情况下有一个权重矩阵64x5,在这种情况下有时有一个偏差向量,无,因为use_bias=False。此外,当层处理一些输入时,它输出一些具有形状的东西。在这种情况下,输入为3D,形状为[m,29,64],其中m为批量大小。对于批次中的每个实例和每个主题,输出是该输入与权重矩阵的矩阵相乘的结果。输出形状:[m,29,5]。