WedX - журнал о программировании и компьютерных науках

Функция TensorFlow tf.nn.rnn, как использовать результаты вашего обучения, чтобы сделать один проход вперед через RNN

Мне трудно использовать аргумент «начальное состояние» в функции tf.nn.rnn.

val, _ = tf.nn.rnn(cell1, newBatch, initial_state=stateP, dtype=tf.float32)

newBatch.shape => (1, 1, 11)
stateP.shape => (2, 2, 1, 11)

В общем, я прошел обучение своей нейросети LSTM и теперь хочу использовать ее значения. Как мне это сделать? Я знаю, что функция tf.nn.rnn() вернет состояние... но я не знаю, как ее подключить.

fyi stateP.shape => (2, 2, 1, 11) ..... может быть, потому что я использовал сложенные ячейки LSTM?

Я также пробовал:

val, _ = tf.nn.dynamic_rnn(stacked_lstm, newBatch, initial_state=stateP, dtype=tf.float32)

но я получаю сообщение об ошибке «AttributeError: объект NoneType не имеет атрибута 'op'».
Я почти уверен, что речь идет об объекте 'NoneType', это кортеж stateP, который я дал, но я не уверен что делать здесь.

EDIT: я, наконец, запустил это, используя:

init_state = cell.zero_state(batch_size, tf.float32)

Чтобы определить точную форму, мне нужно передать аргумент «initial_state». В моем случае это был НАБОР из 4 тензоров, каждый из которых имел форму (1, 11). Я сделал это так:

    stateP0 = tf.convert_to_tensor(stateP[0][0])
    stateP1 = tf.convert_to_tensor(stateP[0][1])
    stateP2 = tf.convert_to_tensor(stateP[1][0])
    stateP3 = tf.convert_to_tensor(stateP[1][1])
    newStateP = stateP0, stateP1, stateP2, stateP3

Хорошо! Теперь функция tf.dynamic_rnn() работает, но каждый раз, когда я ее запускаю, она дает разные результаты... так какой смысл передавать ее в исходное состояние? Я хочу использовать состояние, которое я научился находить... и я не хочу, чтобы оно менялось. Я хочу реально использовать результаты своего обучения!


Ответы:


1

Вы, вероятно, используете устаревшее (или скоро будет) поведение. stateP в вашем случае представляет собой конкатенацию c (состояние ячейки) и h (вывод lstm на последнем этапе развертывания). Поэтому вам нужно разрезать состояние по измерению 1, чтобы получить фактическое состояние.

Или вы можете инициализировать свою ячейку LSTM с помощью state_is_tuple=True, что я бы порекомендовал, чтобы вы могли легко получить конечное состояние (если хотите повозиться с ним), проиндексировав состояние stateP[0]. Или вы можете просто передать кортеж состояния непосредственно в rnn (или dynamic_rnn).

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

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

16.08.2016
  • спасибо, оказалось дело в форме. Я всегда использовал state_is_tuple=True, но у меня возникли проблемы с переформатированием формы, необходимой для аргумента initial_state. Но теперь более фундаментальный вопрос: как мне последовательно использовать это состояние «машинного обучения»? Я просто хочу запускать данные через архитектуру LSTM NN, и результат этого должен быть одинаковым каждый раз, если данные одинаковы... но это не то, что я вижу с функцией tf.nn.rnn() . У меня другие результаты! 16.08.2016
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]