在张量流顺序模型中初始化权重

时间:2020-09-23 04:21:20

标签: python tensorflow machine-learning keras

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

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))

3 个答案:

答案 0 :(得分:0)

您可以简单地尝试一下

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

答案 1 :(得分:0)

当然可以。 查看此链接上的文档: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)

答案 2 :(得分:0)

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

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

您可能还会了解.set_weights(...)

例如,在下面的代码中,我为第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())