'strided_slice_19' (op: 'StridedSlice') с входными фигурами - PullRequest
0 голосов
/ 03 июня 2019

Я пытался использовать keras.preprocessing.image.ImageDataGenerator на TPU, но я получаю эту ошибку с первой эпохи. Тот же код работает с ноутбуком Jupyter, но на обучение уходит несколько часов.

Моя МОДЕЛЬ:

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(220))
model.add(Activation('relu'))
model.add(Dropout(0.4))
model.add(Dense(120))
model.add(Activation('softmax'))

Оптимизатор

opt = tf.train.AdamOptimizer(learning_rate)

model.compile(
      optimizer=opt,
      loss='categorical_crossentropy',
      metrics=['acc'])

Конвертировать Keras в TPU

try:
    device_name = os.environ['COLAB_TPU_ADDR']
    TPU_ADDRESS = 'grpc://' + device_name
    print('Found TPU at: {}'.format(TPU_ADDRESS))

except KeyError:
    print('TPU not found')
tpu_model = tf.contrib.tpu.keras_to_tpu_model(
    model,
    strategy=tf.contrib.tpu.TPUDistributionStrategy(
        tf.contrib.cluster_resolver.TPUClusterResolver(TPU_ADDRESS)))

ImageDataGenerator

train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

# this is the augmentation configuration we will use for testing:
# only rescaling
test_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='categorical')#binary ,categorical

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='categorical')

Модель Fit

model_fit=tpu_model.fit_generator(
    train_generator,

    epochs=50,
    steps_per_epoch=60, 

)

Я получаю эту ошибку

Эпоха 1/50 15/33 [============> .................] - ETA: 8 с - потери: 4,7722 - в соответствии с 0,0083INFO: тензор потока: новые формы ввода;(повторная) компиляция: mode = train (количество ядер 8), [TensorSpec (shape = (0,), dtype = tf.int32, name = 'core_id_60'), TensorSpec (shape = (0, 128, 128,3), dtype = tf.float32, name = 'conv2d_3_input_20'), TensorSpec (shape = (0, 120), dtype = tf.float32, name = 'активации_13_target_30')] --------------------------------------------------------------------------- InvalidArgumentError Traceback (последний вызов был последним) /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py в _create_c_op (graph), node_def, inputs, control_inputs) 1658
try: -> 1659 c_op = c_api.TF_FinishOperation (op_desc) 1660 за исключением ошибок. InvalidArgumentError как e:

InvalidArgumentError: индекс среза 0 измерения 0 вне границ.для 'strided_slice_19' (op: 'StridedSlice') с входными формами: [0], [1], [1], [1] и с вычисленными входными тензорами: input [1] = <0>, input [2] =<1>, input [3] = <1>.

Во время обработки вышеупомянутого исключения произошло другое исключение:

ValueError Traceback (последний последний вызов) 17 кадров / usr / local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py в _create_c_op (graph, node_def, inputs, control_inputs) 1660
за исключением ошибок. InvalidArgumentError as e: 1661 # Преобразовать в ValueError для обратной совместимости,-> 1662 повысить ValueError (str (e)) 1663 1664 return c_op

ValueError: индекс среза 0 измерения 0 выходит за пределы.для 'strided_slice_19' (op: 'StridedSlice') с входными формами: [0], [1], [1], [1] и с вычисленными входными тензорами: input [1] = <0>, input [2] =<1>, вход [3] = <1>.

...