#python #tensorflow #tensorflow2.0 #tensorboard
#python #тензорный поток #tensorflow2.0 #tensorboard
Вопрос:
Мы решили перенести нашу кодовую базу с Tensorflow 1.13.1 на Tensorflow 2.3.
Кажется, что все работает правильно, за исключением обучения модели LSTM с обратным вызовом Tensorboard. Процесс обучения зависает навсегда после первой партии (возможно, Tensorboard ожидает, что итоговые операции никогда не появятся ?).
После некоторых исследований кажется, что проблема возникает из-за уровня LSTM, полагающегося на реализацию cuDNN. Действительно, все работает так, как задумано, когда Tensorflow вынуждает вернуться к реализации уровня vanilla LSTM (предоставляя ему несовместимые аргументы с реализацией cuDNN, c.f.https://www.tensorflow.org/api_docs/python/tf/keras/layers/LSTM).
Есть предложения по исправлению этого? У кого-нибудь есть идеи о том, почему Tensorboard не работает с реализацией cuDNN уровня LSTM?
# Callbacks
log_dir = './logs'
callbacks = [TensorBoard(log_dir=log_dir)] # Training works without this callback
# Model
words = Input(shape=(max_sequence_length,))
x = Embedding(input_dim, embedding_size, weights=[embedding_matrix], trainable=False)(words)
x = Bidirectional(LSTM(40, return_sequences=True))(x) # Setting recurrent_dropout = 0.1 makes the training work (using the vanilla LSTM implementation)
hidden = concatenate([
GlobalMaxPooling1D()(x),
GlobalAveragePooling1D()(x),
])
hidden = add([hidden, Dense(40, activation='relu')(hidden)])
out = Dense(3, activation='softmax', kernel_initializer='glorot_uniform')(hidden)
model = Model(inputs=words, outputs=[out])
model.compile(optimizer=Adam(lr=0.01), loss='categorical_crossentropy')
# Fit
fit_history = model.fit(
x_train,
y_train,
batch_size=batch_size,
epochs=epochs,
validation_data=validation_data,
callbacks=callbacks
)
Обновить :
Попробовал это на другом компьютере (Windows 10), и, похоже, все работает правильно…
Однако рабочие компьютеры в основном работают на Windows 7 (проблема возникла на 2 отдельных ПК), и мы используем виртуальные среды.
Еще один совет: может ли вызвать проблему тот факт, что python и наша библиотека установлены на разных жестких дисках? (это одно из сходств настроек, в которых возникает проблема)
Комментарии:
1. Используйте tensorflow 1.4.0 и python 3.6x …. многие функции, такие как tensorflow.contrib, были удалены из версий tensorflow выше 1.4.0, поэтому попробуйте использовать 1.4.0 и 3.6x python, это, вероятно, должно сработать, если ваш код слишком медленный, перейдите в Google Colaboratoty, это совершенно бесплатно, вы можете запускать свой высококачественный код с помощью аппаратного обеспечения Google.
2. Привет @ROG_SHAKHYAR и спасибо за ваш ответ. Однако мы действительно хотим обновить нашу версию tensorflow до последней (по крайней мере, 2.X). Мы работаем над кодовой базой, которая будет повторно использоваться многими людьми на работе, и которую необходимо максимально обновить. Есть другие предложения?
3. Возможно, попробуйте переустановить cudnn со всем включенным, если вы используете установщик, и всегда храните python и другие материалы, связанные с python, на том же диске, так как изменение каталога может быть беспорядочным, особенно на разных дисках, в любом случае, если ничего не работает, используйте двоичную установку tensorflow и следуйте веб-сайту tensorflow для установки других зависимостей
4. Я сталкиваюсь с той же проблемой. Это тот же самый conda env в Windows 10, код работает нормально. Но когда он запускается в Windows 7, добавлен обратный вызов tensorboard, он зависает навсегда. Есть ли у вас какие-либо подсказки / исправлена ли эта проблема?
5. К сожалению, мы не нашли способа исправить это…. Итак, мы отказались от использования Tensorboard на компьютерах с Windows 7 (мы просто добавили проверку при добавлении обратного вызова). Похоже, что это очень специфическая ошибка (Windows 7 / Tensorflow 2.x / LSTM / cuDNN), и кажется маловероятным, что это легко исправить…