python - 如何在 TensorFlow 的 eager 执行中使用 Keras.applications 的 ResNeXt?

标签 python tensorflow keras eager-execution

我正在尝试从 Keras applications 获取 ResNet101 或 ResNeXt,由于某种原因,它们仅在 Keras 的存储库中可用。在 TensorFlow 1.10 中:

import tensorflow as tf
from keras import applications

tf.enable_eager_execution()

resnext = applications.resnext.ResNeXt101(include_top=False, weights='imagenet', input_shape=(SCALED_HEIGHT, SCALED_WIDTH, 3), pooling=None)

但是,这会导致:

Traceback (most recent call last):
  File "myscript.py", line 519, in get_fpn
    resnet = applications.resnet50.ResNet50(include_top=False, weights='imagenet', input_shape=(SCALED_HEIGHT, SCALED_WIDTH, 3), pooling=None)
  File "Keras-2.2.4-py3.5.egg/keras/applications/__init__.py", line 28, in wrapper
    return base_fun(*args, **kwargs)
  File "Keras-2.2.4-py3.5.egg/keras/applications/resnet50.py", line 11, in ResNet50
    return resnet50.ResNet50(*args, **kwargs)
  File "Keras_Applications-1.0.8-py3.5.egg/keras_applications/resnet50.py", line 214, in ResNet50
    img_input = layers.Input(shape=input_shape)
  File "Keras-2.2.4-py3.5.egg/keras/engine/input_layer.py", line 178, in Input
    input_tensor=tensor)
  File "Keras-2.2.4-py3.5.egg/keras/legacy/interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "Keras-2.2.4-py3.5.egg/keras/engine/input_layer.py", line 87, in __init__
    name=self.name)
  File "Keras-2.2.4-py3.5.egg/keras/backend/tensorflow_backend.py", line 529, in placeholder
    x = tf.placeholder(dtype, shape=shape, name=name)
  File "tensorflow/python/ops/array_ops.py", line 1732, in placeholder
    raise RuntimeError("tf.placeholder() is not compatible with "
RuntimeError: tf.placeholder() is not compatible with eager execution.

我从其 GitHub master 分支安装了 Keras,因为出于某种奇怪的原因,Keras 和 TensorFlow 的 Keras API 的 pip 安装不包括 ResNet101、ResNetv2、ResNeXt 等。有谁知道我如何运行此类模型(最好是 ResNeXt)在 TensorFlow 的 Eager Execution 中?

最佳答案

如错误所示,tf.placeholder() 用作使用 feed_dict 将数据馈送到 tf Session 的占位符,与 eager 模式不兼容。

此链接通过示例很好地解释了它:https://github.com/tensorflow/tensorflow/issues/18165#issuecomment-377841925

您可以使用 tf.keras.applications 中的模型来实现此目的。我尝试过 TF2.0 Beta 版本。

https://www.tensorflow.org/beta/tutorials/images/transfer_learning#create_the_base_model_from_the_pre-trained_convnets

import tensorflow as tf
resnext = tf.keras.applications.ResNeXt50(weights=None)
print(tf.executing_eagerly())

正确

ResNeXt 模型不可用(我必须进行一些更改,例如将 resnext.py 从 keras/applications 复制到 tensorflow/python/keras/applications 并更改 __init__.py 等),但您可以尝试使用现有模型,例如ResNet50,如果它们有效,那么您可以尝试移植 ResNeXt。

关于python - 如何在 TensorFlow 的 eager 执行中使用 Keras.applications 的 ResNeXt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56721498/

相关文章:

python - 是否有适当的方法将复合希腊字母设置为 SymPy 中的符号?

python-3.x - Tensorflow 1.15/Keras 2.3.1 Model.train_on_batch() 返回的值多于输出/损失函数

python - Keras flow_from_directory shuffle 无法正常工作

keras - Google COLAB 免费版本保存 Keras 训练模型

python - 如何在 Keras 中创建虚拟模型?

python - python中的计算器问题

python - 将子图与颜色条对齐

python - 输入()+类型错误: 'dict' object is not callable

tensorflow - CPU端的性能瓶颈

android - 没有 OpKernel Tensorflow Mobile Android。如何调试?