如何解决重置Keras模型的所有权重
我希望能够重设整个Keras模型的权重,这样就不必再次编译它。当前,编译模型是我代码的主要瓶颈。这是我的意思的示例:
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28)),tf.keras.layers.Dense(16,activation='relu'),tf.keras.layers.Dense(10)
])
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.001),loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
data = tf.keras.datasets.mnist
(x_train,y_train),(x_test,y_test) = data.load_data()
model.fit(x=x_train,y=y_train,epochs=10)
# Reset all weights of model here
# model.reset_all_weights() <----- something like that
model.fit(x=x_train,epochs=10)
解决方法
您可以使用此循环:
for ix,layer in enumerate(model.layers):
if hasattr(model.layers[ix],'kernel_initializer') and \
hasattr(model.layers[ix],'bias_initializer'):
weight_initializer = model.layers[ix].kernel_initializer
bias_initializer = model.layers[ix].bias_initializer
old_weights,old_biases = model.layers[ix].get_weights()
model.layers[ix].set_weights([
weight_initializer(shape=old_weights.shape),bias_initializer(shape=len(old_biases))])
原始重量:
model.layers[1].get_weights()[0][0]
array([ 0.4450057,-0.13564804,0.35884023,0.41411972,0.24866664,0.07641453,0.45726687,-0.04410008,0.33194816,-0.1965386,-0.38438258,-0.13263905,-0.23807487,0.40130925,-0.07339832,0.20535922],dtype=float32)
新的权重:
model.layers[1].get_weights()[0][0]
array([-0.4607593,-0.13104361,-0.0372932,-0.34242013,0.12066692,-0.39146423,0.3247317,0.2635846,-0.10496247,-0.40134245,0.19276887,0.2652442,-0.18802321,-0.18488845,0.0826562,-0.23322225],dtype=float32)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。