初始化tensorflow序列模型中的权重



有什么方法可以初始化序列模型tensorflow中的权重(w向量(吗?我正在使用下面显示的神经网络代码,并想初始化我自己的权重

import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense 
model=Sequential()
model.add(Dense(X_train.shape[1],activation='relu'))
model.add(Dense(X_train.shape[1]/2,activation='relu'))
model.add(Dense(X_train.shape[1]/2,activation='relu'))
model.add(Dense(X_train.shape[1]/2,activation='relu'))
model.add(Dense(1,activation='sigmoid'))
model.compile(optimizer='rmsprop',loss='binary_crossentropy')
model.fit(x=X_train,y=y_train,epochs=200,validation_data=(X_val,y_val))

您可以简单地尝试这个

for layer in model.layers:
init_layer_weight = [] # the weights yourself in this layer
layer.set_weights(init_layer_weight)

当然可以。查看此链接上的文档:https://keras.io/api/layers/initializers/它们向您展示了如何使用它们的一些初始化器(TruncatedNormal、RandomUniform、GlorotUniform…(,在页面底部,它们为您提供了一个自定义初始化器设置的示例,如以下示例:

def my_init(shape, dtype=None):
return tf.random.normal(shape, dtype=dtype)
layer = Dense(64, kernel_initializer=my_init)

首先需要提供Input()层,如下面的代码所示。这允许层实际计算其内核/权重大小。在代码中使用"//2"而不是"/2"进行整数除法。

之后,您可以从model.layers列表中访问层,该列表包括除输入层之外的所有层。在每个层上,您可以调用".set_weights(…(",此方法接受两个元素的python列表-第一个元素是内核权重,第二个是偏置权重,两个权重都应该是numpy数组。对于Dense层类型内核是2D阵列,其行数等于输入大小(先前密集输出节点计数(,列数等于此密集层节点/输出的数量。偏置是大小等于该密集层节点/输出数量的1D阵列。

您也可以阅读有关.set_weights(…(.的信息

例如,在下一个代码中,我设置了Layer 2&3.

import tensorflow as tf, numpy as np, tensorflow.keras as keras
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense 
X_train = np.array([[1.,2,3,4],[5,6,7,8]])
model=Sequential()
model.add(keras.layers.Input(X_train.shape[1:]))
model.add(Dense(X_train.shape[1],activation='relu')) # Layer 0
model.add(Dense(X_train.shape[1]//2,activation='relu')) # Layer 1
model.add(Dense(X_train.shape[1]//2,activation='relu')) # Layer 2
model.add(Dense(X_train.shape[1]//2,activation='relu')) # Layer 3
model.add(Dense(1,activation='sigmoid')) # Layer 4
model.compile(optimizer='rmsprop',loss='binary_crossentropy')
#model.fit(x=X_train,y=y_train,epochs=200,validation_data=(X_val,y_val))
# Set weights e.g. for Layers 2, 3
for layer in model.layers[2:4]:
print('Weights before', layer.get_weights())
layer.set_weights([
np.array([
[1., 2],
[3 , 4],
]),
np.array([
5., 6,
]),
])
print('Weights after', layer.get_weights())

最新更新