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