Вручную установить веса в тензорном графике - PullRequest
0 голосов
/ 28 марта 2020

Я построил нейронную сеть с пользовательскими слоями. Сеть имеет ряд обучаемых весов и смещений:

<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)

После запуска сеанса с данными тестирования из обучения ...

Это действительно так? обновить переменные в графике? Я чувствую, что он не оказывается в нужном месте, и модель все еще имеет все случайно инициализированные значения ...

Любая помощь очень ценится. Все еще немного борется с концепциями тензорного потока. Спасибо:)

1 Ответ

0 голосов
/ 28 марта 2020

Для всех тех, кто наткнулся на мой вопрос, потому что я пытаюсь сохранить модель на диск во время обучения: есть более простой способ! Вы можете использовать собственный модуль сохранения потока, даже для пользовательских моделей и слоев. См. это очень полезное и простое в использовании руководство.

Из любопытства я все же хотел бы знать, как вручную изменять переменные в графике, однако мой вопрос по-прежнему остается без ответа. ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...