[英]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.