簡體   English   中英

在 tensorflow 順序 model 中初始化權重

[英]Initialise weights in tensorflow sequential model

有什么方法可以在順序 model tensorflow 中初始化權重(w 向量)? 我正在使用我的 neural.network 下面顯示的代碼,並想自己初始化權重

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()層,如下面的代碼所示。 這允許層實際計算它們的內核/權重大小。 在 integer 分區的代碼中也使用 '//2' 而不是 '/2'。

之后,您可以從model.layers列表訪問層,該列表包括除輸入層之外的所有層。 在每一層上你可以調用'.set_weights(...)',這個方法接受python的兩個元素列表 - 第一個元素是kernel權重,第二個是偏置權重,兩個權重應該是numpy arrays。對於Dense層類型88157408324D388是2D行數等於輸入大小的數組(先前的密集 output 節點計數)和列數等於該密集層節點/輸出的數量。 偏差是一維數組,其大小等於此密集層節點/輸出的數量。

您還可以閱讀有關.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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM