В соответствии с предложением команды тензорного потока, я привыкаю к энергичному выполнению тензорного потока с tf.keras.Однако всякий раз, когда я тренирую модель, я получаю предупреждение (РЕДАКТИРОВАТЬ: на самом деле, я получаю это предупреждение многократно, более одного раза за шаг тренировки, заполняя мой стандартный вывод):
E tensorflow/core/common_runtime/bfc_allocator.cc:373] tried to deallocate nullptr
Предупреждение, похоже, не влияет на качество обучения, но мне интересно, что оно означает и можно ли от него избавиться.
Я использую виртуальную среду conda с python 3.7 и tenorflow1.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()