如何使用一个numpy数组在Keras中设置权重?
deep-learning
keras
machine-learning
python
7
0

我在设置值的Keras后端功能上遇到麻烦。我正在尝试将模型从PyTorch转换为Keras,并尝试设置Keras模型的权重,但是权重似乎没有被设置。注意:我实际上并没有使用np.ones进行设置,仅以示例为例。

我努力了...

加载现有模型

import keras
from keras.models import load_model, Model
model = load_model(model_dir+file_name)
keras_layer = [layer for layer in model.layers if layer.name=='conv2d_1'][0]

创建一个简单的模型

img_input = keras.layers.Input(shape=(3,3,3))
x = keras.layers.Conv2D(1, kernel_size=1, strides=1, padding="valid", 
use_bias=False, name='conv1')(img_input)
model = Model(img_input, x)
keras_layer = [layer for layer in model.layers if layer.name=='conv1'][0]

然后使用set_weights或set_value

keras_layer.set_weights([np.ones((1, 1, 3, 1))])

要么...

K.batch_set_value([(weight,np.ones((1, 1, 3, 1))) for weight in keras_layer.weights])

之后,我将调用以下任一方法:

K.batch_get_value([weight for weight in keras_layer.weights])
keras_layer.get_weights()

而且似乎没有设置任何权重。返回与以前相同的值。

[array([[[[  1.61547325e-06],
      [  2.97779252e-06],
      [  1.50160542e-06]]]], dtype=float32)]

如何设置numpy值数组在Keras中的图层权重?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

您的代码中的keras_layer是什么?

您可以通过以下方式设置权重:

model.layers[i].set_weights(listOfNumpyArrays)    
model.get_layer(layerName).set_weights(...)
model.set_weights(listOfNumpyArrays)

model是现有模型的实例。您可以使用上述相同实例中的get_weights()方法get_weights()列表的预期长度及其数组形状。

收藏
评论

keras的set_weights()方法接受一个numpy数组列表,您传递给该方法的内容似乎是一个数组。其形状应与同一层上的get_weights()输出的形状相同。这是代码:

l=[]
x=np.array() #weights
y=np.array() #array of biases
l.append(x)
l.append(y)
loaded_model.layers[0].set_weights(l) #loaded_model.layer[0] being the layer

这对我有用,它在调用get_weights()时返回更新的权重。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号