首页 > 解决方案 > 带有输入形状的“strided_slice_19”(操作:“StridedSlice”)

问题描述

我尝试在 TPU 上使用 keras.preprocessing.image.ImageDataGenerator,但我从第一个 epoch 收到此错误。相同的代码可用于 jupyter notebook,但需要数小时进行训练。

我的模型:

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)))

图像数据生成器

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')

模型拟合

model_fit=tpu_model.fit_generator(
    train_generator,

    epochs=50,
    steps_per_epoch=60, 

)

我收到这个错误

时代 1/50 15/33 [============>.......] - ETA:8s - 损失:4.7722 - acc: 0.0083INFO:tensorflow:新的输入形状;(重新)编译: mode=train (# of cores 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='activation_13_target_30')] ----------- -------------------------------------------------- -------------- InvalidArgumentError Traceback (最近一次调用最后一次) /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py in _create_c_op(graph ,node_def,inputs,control_inputs)1658
尝试:-> 1659 c_op = c_api.TF_FinishOperation(op_desc)1660除了errors.InvalidArgumentError作为e:

InvalidArgumentError:维度 0 的切片索引 0 超出范围。对于“strided_slice_19”(操作:“StridedSlice”),输入形状:[0]、[1]、[1]、[1] 和计算输入张量:输入[1] = <0>、输入[2] = <1>,输入[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
除了errors.InvalidArgumentError as e: 1661 # 转换为 ValueError 以实现向后兼容性。-> 1662 引发 ValueError(str(e)) 1663 1664 返回 c_op

ValueError:维度 0 的切片索引 0 超出范围。对于“strided_slice_19”(操作:“StridedSlice”),输入形状:[0]、[1]、[1]、[1] 和计算输入张量:输入[1] = <0>、输入[2] = <1>,输入[3] = <1>。

标签: python-3.xtensorflowimage-processingdeep-learningtpu

解决方案


推荐阅读