1

これを実行して、TPUでEffecientNetを実行しようとしています

effnet = efn.EfficientNetB5(weights='imagenet', include_top=False)

# Replace all Batch Normalization layers by Group Normalization layers
for i, layer in enumerate(effnet.layers):
    if "batch_normalization" in layer.name:
        effnet.layers[i] = GroupNormalization(groups=32, axis=-1, epsilon=0.00001)


model = Sequential()
model.add(effnet)
model.add(GlobalAveragePooling2D())
model.add(Dropout(0.5))
model.add(Dense(8, activation=elu))
model.compile(loss='mse', optimizer=RAdam(lr=0.00005), metrics=['mse', 'acc'])
print(model.summary())        

model_json = model.to_json()
with open("model_ef7_fn.json", "w") as json_file:
    json_file.write(model_json)


tpu_model = tf.contrib.tpu.keras_to_tpu_model(
    model,
    strategy=tf.contrib.tpu.TPUDistributionStrategy(
        tf.contrib.cluster_resolver.TPUClusterResolver(
            tpu='grpc://' + os.environ['COLAB_TPU_ADDR'])
    )
)

しかし、私はこのエラーが発生します

ValueError: レイヤーには、非バッチ ディメンションの可変形状があります。TPU モデルは、すべての操作で形状が一定でなければなりません。

    You may have to specify `input_length` for RNN/TimeDistributed layers.

    Layer: <keras.engine.training.Model object at 0x7f34e5c06f60>
    Input shape: (None, None, None, 3)
    Output shape: (None, None, None, 2048)
4

0 に答える 0