Учитывая, что я обучил несколько разных моделей на одних и тех же данных, и все обученные нейронные сети имеют одинаковую архитектуру, я хотел бы знать, возможно ли восстановить эти модели, усреднить их веса и инициализировать мои веса, используя среднее значение.
Это пример того, как может выглядеть график.В основном мне нужно среднее значение весов, которые я собираюсь загрузить.
import tensorflow as tf
import numpy as np
#init model1 weights
weights = {
'w1': tf.Variable(),
'w2': tf.Variable()
}
# init model1 biases
biases = {
'b1': tf.Variable(),
'b2': tf.Variable()
}
#init model2 weights
weights2 = {
'w1': tf.Variable(),
'w2': tf.Variable()
}
# init model2 biases
biases2 = {
'b1': tf.Variable(),
'b2': tf.Variable(),
}
# this the average I want to create
w = {
'w1': tf.Variable(
tf.add(weights["w1"], weights2["w1"])/2
),
'w2': tf.Variable(
tf.add(weights["w2"], weights2["w2"])/2
),
'w3': tf.Variable(
tf.add(weights["w3"], weights2["w3"])/2
)
}
# init biases
b = {
'b1': tf.Variable(
tf.add(biases["b1"], biases2["b1"])/2
),
'b2': tf.Variable(
tf.add(biases["b2"], biases2["b2"])/2
),
'b3': tf.Variable(
tf.add(biases["b3"], biases2["b3"])/2
)
}
weights_saver = tf.train.Saver({
'w1' : weights['w1'],
'w2' : weights['w2'],
'b1' : biases['b1'],
'b2' : biases['b2']
})
weights_saver2 = tf.train.Saver({
'w1' : weights2['w1'],
'w2' : weights2['w2'],
'b1' : biases2['b1'],
'b2' : biases2['b2']
})
И это то, что я хочу получить, когда я запускаю сеанс tf.c содержит веса, которые я хочу использовать, чтобы начать тренировку.
# Create a session for running operations in the Graph.
init_op = tf.global_variables_initializer()
init_op2 = tf.local_variables_initializer()
with tf.Session() as sess:
coord = tf.train.Coordinator()
# Initialize the variables (like the epoch counter).
sess.run(init_op)
sess.run(init_op2)
weights_saver.restore(
sess,
'my_model1/model_weights.ckpt'
)
weights_saver2.restore(
sess,
'my_model2/model_weights.ckpt'
)
a = sess.run(weights)
b = sess.run(weights2)
c = sess.run(w)