Colab + Keras + TensorBoard FailedPreconditionError - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь запустить простой скрипт 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: Ошибка при чтении переменной ресурса conv_dw_8_2 / deepwise_kernel из контейнера: localhost. Это могло, это может означает, что переменная была неинициализирована. Не найдено: Ресурс localhost / conv_dw_8_2 / deepwise_kernel / N10tensorflow3VarE не делает существовать. [[Узел: conv_dw_8_2 / deepwise / ReadVariableOp = ReadVariableOpdtype = DT_FLOAT, _device = "/ работа: локальный / реплика: 0 / задача: 0 / устройства: GPU: 0"]] [[Узел: loss_2 / mul / _147 = _Recvclient_terminated = false, recv_device = "/ работа: локальный / реплика: 0 / задача: 0 / устройства: CPU: 0", send_device = "/ работа: локальный / реплика: 0 / задача: 0 / устройства: GPU: 0", send_device_incarnation = 1, тензор_имя = "edge_6752_loss_2 / mul", tensor_type = DT_FLOAT, _device = "/ работа: локальный / реплика: 0 / задача: 0 / устройства: CPU: 0"]]

Кто-нибудь знает, что я делаю не так? Это кажется очень полезным способом запуска TensorBoard на Colab, если бы я мог заставить его работать.

1 Ответ

0 голосов
/ 24 ноября 2018

Это вызвано конфликтующими версиями Keras. Tensorboardcolab использует полную библиотеку keras , а вы импортируете реализацию 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

Несмотря на то, что код работает с этими изменениями, вы можете рассмотреть возможность использования версии Keras оптимизатора Adam , поэтому вам больше не нужно явно импортировать тензорный поток.

model.compile(loss='categorical_crossentropy', 
                    optimizer=keras.optimizers.Adam(lr=0.001), 
                    metrics=['accuracy'])`

Используйте tf.keras и патч TensorBoardColab

Ваш код работает нормально, если вы исправите callbacks.py и core.py и исправите там импорт:

<s>from keras.callbacks import TensorBoard</s> from tensorflow.keras.callbacks import TensorBoard

Вы также можете использовать эту вилку , где я внес эти изменения.

...