喀拉斯热塑性聚氨酯。编译失败:检测到不支持的操作

Keras TPU. Compilation failure: Detected unsupported operations

我尝试使用 Google Colab TPU 运行 我的 keras UNet 模型,我用 UpSampling2D 遇到了这个问题。任何解决方案或解决方法?

编码为运行:

import os
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import UpSampling2D

model = Sequential()
model.add(UpSampling2D((2, 2), input_shape=(16, 16, 1)))
model.compile(optimizer=tf.train.RMSPropOptimizer(learning_rate=0.01), 
              loss='binary_crossentropy', metrics=['acc'])

TPU_WORKER = 'grpc://' + os.environ['COLAB_TPU_ADDR']
tf.logging.set_verbosity(tf.logging.INFO)


model = tf.contrib.tpu.keras_to_tpu_model(
    model,strategy=tf.contrib.tpu.TPUDistributionStrategy(
        tf.contrib.cluster_resolver.TPUClusterResolver(TPU_WORKER)))

X = np.zeros((1024, 16, 16, 1))
Y = np.zeros((1024, 32, 32, 1))

model.fit(X, Y, batch_size=1024)

错误:

RuntimeError: Compilation failed: Compilation failure: Detected unsupported operations when trying to compile graph cluster_3_5095732716396540171[] on XLA_TPU_JIT: ResizeNearestNeighbor (No registered 'ResizeNearestNeighbor' OpKernel for XLA_TPU_JIT devices compatible with node {{node tpu_140211339657168/up_sampling2d_1/ResizeNearestNeighbor}} = ResizeNearestNeighbor[T=DT_FLOAT, align_corners=false, _device="/device:TPU_REPLICATED_CORE"](infeed-train_1:1, tpu_140211339657168/up_sampling2d_1/mul) . Registered: device='CPU'; T in [DT_DOUBLE] device='CPU'; T in [DT_FLOAT] device='CPU'; T in [DT_BFLOAT16] device='CPU'; T in [DT_HALF] device='CPU'; T in [DT_INT8] device='CPU'; T in [DT_UINT8] device='CPU'; T in [DT_INT16] device='CPU'; T in [DT_UINT16] device='CPU'; T in [DT_INT32] device='CPU'; T in [DT_INT64] ){{node tpu_140211339657168/up_sampling2d_1/ResizeNearestNeighbor}}

从错误来看,Keras 的 Tensorflow 后端 (ResizeNearestNeighbor) 图中的操作之一目前与 TPU 不兼容。目前有少量 Tensorflow 操作不适用于 TPU (Cloud TPU FAQs)。

您可以查看当前的 TPU 兼容 Tensorflow 操作列表 here. You can also use Tensorboard to see TPU Compatibility Graphs

作为解决方法,您可以尝试结合 TPU 兼容的 Tensorflow 操作来复制 ResizeNearestNeighbor 的行为。特别是,您可能对 ResizeBilinear Op 感兴趣,它与 TPU 兼容。