Python 如何在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,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] 范文摘要 以下是输出: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
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]。