Предупреждение `попытался освободить nullptr` при использовании напряженного выполнения тензорного потока с tf.keras

Согласно предложению команды tenorflow, я привыкаю к ​​стремительному выполнению tenorflow с tf.keras. Однако всякий раз, когда я тренирую модель, я получаю предупреждение (РЕДАКТИРОВАТЬ: на самом деле, я получаю это предупреждение многократно, более одного раза за шаг обучения, заполняя мой стандартный вывод):

E tensorflow/core/common_runtime/bfc_allocator.cc:373] tried to deallocate nullptr

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

Я использую виртуальную среду conda с python 3.7 и тензор потока 1.12, работающих на процессоре. (РЕДАКТИРОВАТЬ: тест с Python 3.6 дает те же результаты.) Ниже приведен минимальный код, который воспроизводит предупреждения. Интересно, что можно прокомментировать строку tf.enable_eager_execution() и увидеть, что предупреждения исчезают.

import numpy as np
import tensorflow as tf

tf.enable_eager_execution()
N_EPOCHS = 50
N_TRN = 10000
N_VLD = 1000

# the label is positive if the input is a number larger than 0.5
# a little noise is added, just for fun
x_trn = np.random.random(N_TRN)
x_vld = np.random.random(N_VLD)
y_trn = ((x_trn + np.random.random(N_TRN) * 0.02) > 0.5).astype(float)
y_vld = ((x_vld + np.random.random(N_VLD) * 0.02) > 0.5).astype(float)

# a simple logistic regression
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(1, input_dim=1))
model.add(tf.keras.layers.Activation('sigmoid'))

model.compile(
    optimizer=tf.train.AdamOptimizer(),
    # optimizer=tf.keras.optimizers.Adam(),  # doesn't work at all with tf eager execution
    loss='binary_crossentropy',
    metrics=['accuracy']
)

# Train model on dataset
model.fit(
    x_trn, y_trn,
    epochs=N_EPOCHS,
    validation_data=(x_vld, y_vld),
)
model.summary()

1 ответ

Быстрые решения:

  • Он не появился, когда я запустил тот же сценарий в TF 1.11, когда была выполнена оптимизация для достижения той же окончательной точности проверки в синтетическом наборе данных.

    ИЛИ ЖЕ

  • Подавить ошибки / предупреждения с помощью встроенного модуля os (адаптировано с /questions/5393708/otklyuchit-otladochnuyu-informatsiyu-tensorflow/5393718#5393718). то есть; установив переменную среды ведения журнала Tensorflow, чтобы не отображались сообщения об ошибках.

      import os
      os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
      import tensorflow as tf
    

Больше информации:

  • Для правильного решения этой ошибки может потребоваться знакомство с вызовами библиотеки MKL и ее интерфейсом на Tensorflow, который написан на C (это за пределами моего текущего опыта TF)

  • В моем случае эта ошибка освобождения памяти возникала всякий раз, когда вызывался метод apply_gradients() оптимизатора. В вашем скрипте он вызывается, когда модель подгоняется к данным обучения.

  • Эта ошибка возникает здесь: tenorflow / core / common_runtime / mkl_cpu_allocator.h

Я надеюсь, что это поможет как временное решение для удобства.

Другие вопросы по тегам