如何将TensorFlow/Keras神经网络模型初始化为指定权重与偏置
设置Keras模型的权重与偏置初始值
针对你的两数相加模型,有两种常用方法可以指定权重和偏置的初始值,以下是具体实现:
方法一:定义层时指定初始化器
直接在Dense层中通过kernel_initializer(权重初始化器)和bias_initializer(偏置初始化器)设置初始值,适合在构建模型时直接定义:
import tensorflow as tf from tensorflow.keras.layers import Dense def build_model(): model = tf.keras.models.Sequential() # 隐藏层:权重初始化为全1,偏置初始化为0 model.add(Dense( units=1, input_dim=2, kernel_initializer=tf.keras.initializers.Constant(value=1.0), bias_initializer=tf.keras.initializers.Constant(value=0.0) )) # 输出层:权重初始化为1,偏置初始化为0 model.add(Dense( units=1, kernel_initializer=tf.keras.initializers.Constant(value=1.0), bias_initializer=tf.keras.initializers.Constant(value=0.0) )) return model # 验证效果 model = build_model() # 输入[1,2],预期输出3 print(model.predict([[1, 2]]))
方法二:构建模型后手动设置权重
如果已经构建好模型,可以通过层的set_weights()方法手动赋值,需要注意权重的形状必须与层的权重矩阵形状匹配:
import tensorflow as tf from tensorflow.keras.layers import Dense def build_model(): model = tf.keras.models.Sequential() model.add(Dense(1, input_dim=2)) model.add(Dense(1)) return model model = build_model() # 设置隐藏层权重:权重矩阵形状为(2,1),全1;偏置形状为(1,),全0 hidden_layer = model.layers[0] hidden_layer.set_weights([ tf.constant([[1.0], [1.0]]), # 权重矩阵 tf.constant([0.0]) # 偏置向量 ]) # 设置输出层权重:权重矩阵形状为(1,1),值为1;偏置形状为(1,),全0 output_layer = model.layers[1] output_layer.set_weights([ tf.constant([[1.0]]), # 权重矩阵 tf.constant([0.0]) # 偏置向量 ]) # 验证效果 print(model.predict([[1, 2]]))
两种方法都能让模型初始状态就实现精确的两数相加,你可以基于这个初始状态进行训练,观察模型的收敛情况。
内容的提问来源于stack exchange,提问作者RussAbbott
相关产品推荐
相关产品推荐

