Я построил нейронную сеть с пользовательскими слоями. Сеть имеет ряд обучаемых весов и смещений:
<tf.Variable 'model/conv1/weight:0' shape=(5, 32) dtype=float32_ref>
<tf.Variable 'model/conv1/weight_1:0' shape=(32, 16) dtype=float32_ref>
<tf.Variable 'model/conv1/bias:0' shape=(32,) dtype=float32_ref>
<tf.Variable 'model/conv1/bias_1:0' shape=(16,) dtype=float32_ref>
...
<tf.Variable 'model/finalConv/weight:0' shape=(68, 128) dtype=float32_ref>
<tf.Variable 'model/finalConv/weight_1:0' shape=(128, 128) dtype=float32_ref>
<tf.Variable 'model/finalConv/weight_2:0' shape=(128, 55000) dtype=float32_ref>
<tf.Variable 'model/finalConv/bias:0' shape=(128,) dtype=float32_ref>
<tf.Variable 'model/finalConv/bias_1:0' shape=(128,) dtype=float32_ref>
<tf.Variable 'model/finalConv/bias_2:0' shape=(55000,) dtype=float32_ref>
Я обучил нейронную сеть, давая хорошие результаты в тестировании. Я добавил в свою модель метод экспорта, который экспортирует веса и смещения в формате numpy. Однако, когда я инициализирую новую модель и импортирую веса, я получаю только случайные результаты (даже с теми же данными, которые дали хорошие результаты в предыдущем тестировании).
Я предполагаю, что веса неправильно загружены в модель. Вот как выглядит объект слоя и как я импортирую и экспортирую весовые коэффициенты и смещения:
class Layer(object):
def __init__(self, layer_sizes, features, keep_prob=None):
self.W = [weight_variable(shape=[layer_sizes[i], layer_sizes[i + 1]]) for i in range(len(layer_sizes) - 1)]
self.B = [bias_variable(shape=[layer_sizes[i + 1]]) for i in range(len(layer_sizes) - 1)]
self.do_something = DoingSomething(self.W, self.B, features, keep_prob)
def export_weights_and_biases(self):
"""Export weights and biases of current layer."""
return self.W, self.B
def import_weights_and_biases(self, weights, biases):
"""Import weights and biases for current layer."""
self.W = weights
self.B = biases
При попытке загрузить обученную модель, я затем построю архитектуру (то есть график), инициализирую веса и смещения, а затем попытаться загрузить параметры из обученной модели следующим образом:
Layer.import_weights_and_biases(saved_weights, saved_biases)
После запуска сеанса с данными тестирования из обучения ...
Это действительно так? обновить переменные в графике? Я чувствую, что он не оказывается в нужном месте, и модель все еще имеет все случайно инициализированные значения ...
Любая помощь очень ценится. Все еще немного борется с концепциями тензорного потока. Спасибо:)