Я пытаюсь запустить простой скрипт Keras и использовать Google Colab с TensorBoard. Вот мой код:
import tensorflow as tf
import tensorflow.keras as keras
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.applications.mobilenet import MobileNet
from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback
# Settings
num_classes = 10
batch_size = 16
epochs = 1
# Data setup
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
# Select model
model = MobileNet(weights=None, input_shape=x_train.shape[1:], classes=num_classes)
# Select loss, optimizer, metric
model.compile(loss='categorical_crossentropy',
optimizer=tf.train.AdamOptimizer(0.001),
metrics=['accuracy'])
# Train
tbc=TensorBoardColab()
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_test, y_test),
callbacks=[TensorBoardColabCallback(tbc)])
Это предложение, которое я видел, использовать TensorBoard с Colab, как указано здесь: Могу ли я использовать Tensorboard с Google Colab?
Однако при добавлении обратного вызова я получаю сообщение об ошибке:
FailedPreconditionError: Error while reading resource variable conv_dw_8_2/depthwise_kernel from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/conv_dw_8_2/depthwise_kernel/N10tensorflow3VarE does not exist. [[Node: conv_dw_8_2/depthwise/ReadVariableOp = ReadVariableOpdtype=DT_FLOAT, _device = "/job:localhost/replica:0/task:0/device:GPU:0"]] [[Node: loss_2/mul/_147 = _Recvclient_terminated=false, recv_device = "/job:localhost/replica:0/task:0/device:CPU:0", send_device = "/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name = "edge_6752_loss_2/mul", tensor_type=DT_FLOAT, _device = "/job:localhost/replica:0/task:0/device:CPU:0"]]
Кто-нибудь знает, что я делаю не так? Это кажется очень полезным способом запустить TensorBoard на Colab, если бы я мог заставить его работать.
Это вызвано конфликтующими версиями Keras. Tensorboardcolab использует полный библиотека Кераса при импорте реализации tf.keras API Keras. Итак, когда вы подбираете модель, вы в конечном итоге используете две разные версии keras.
У вас есть несколько вариантов:
import tensorflow as tf
import keras
from keras.datasets import cifar10
from keras.applications.mobilenet import MobileNet
from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback
Хотя код отлично работает с этими изменениями, вы можете рассмотреть возможность использования Версия Кераса оптимизатора Adam, поэтому вам больше не нужно явно импортировать тензорный поток.
model.compile(loss='categorical_crossentropy',
optimizer=keras.optimizers.Adam(lr=0.001),
metrics=['accuracy'])`
Ваш код работает нормально, если вы исправите callbacks.py и core.py и исправите там импорт:
from keras.callbacks import TensorBoard
from tensorflow.keras.callbacks import TensorBoard
Вы также можете использовать эта вилка, где я внес эти изменения.
Спасибо, Саломон Тетелепта! Вы проделали отличную работу!