使用Keras Embedding处理时间特征时,如何获取其权重矩阵?
解决Keras Embedding层权重获取的报错问题
嗨,我来帮你搞定这个报错的问题~
你遇到的get_weights() missing 1 required positional argument: 'self'错误,根源在于你没有正确保存Embedding层的实例对象,而是把层的调用结果(一个张量)赋值给了hours_embedding。get_weights()是层实例的方法,不是张量的方法,自然会报错啦。
正确的代码写法
首先,我们需要把Embedding层的实例和它的调用操作分开:
from keras.layers import Embedding, Input # 定义输入张量 hours_input = Input(shape=(1,), name='hours_input') # 先创建Embedding层的实例,单独保存这个层对象 hours_embedding_layer = Embedding(24, 64) # 再用这个层实例处理输入张量,得到嵌入后的输出张量 hours_embedding = hours_embedding_layer(hours_input)
获取权重矩阵
现在你直接调用层实例的get_weights()方法就能拿到权重了:
# 获取权重,返回的是一个列表,第一个元素就是Embedding的权重矩阵 weights = hours_embedding_layer.get_weights() embedding_matrix = weights[0] # 这个矩阵的形状是(24, 64),对应你设置的输入维度24和嵌入维度64
补充说明
如果你的层还没有被初始化(比如没构建完整模型、没训练过),可以手动调用build()方法来初始化权重:
# 根据输入形状初始化层的权重 hours_embedding_layer.build((None, 1)) # 之后再获取权重就没问题了 weights = hours_embedding_layer.get_weights()
内容的提问来源于stack exchange,提问作者azin
相关产品推荐
相关产品推荐

