首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >tf.keras.layers.Conv2D()不能与设置为float16的Keras后端一起使用

tf.keras.layers.Conv2D()不能与设置为float16的Keras后端一起使用
EN

Stack Overflow用户
提问于 2019-05-20 21:55:47
回答 1查看 767关注 0票数 3

我正在尝试训练一个CNN在谷歌Colab (也尝试了与特斯拉v100),与keras后端设置为float16。

tf.keras.backend.set_floatx('float16')

但它在使用Conv2D编译模型时抛出错误。

    model = tf.keras.models.Sequential([
      tf.keras.layers.Conv2D(16,(3,3), activation='relu', input_shape=(300,300,3)),
      tf.keras.layers.MaxPool2D(2,2),
      tf.keras.layers.Dense(256, activation='relu'),
      tf.keras.layers.Dropout(.5),
      tf.keras.layers.Dense(128, activation='relu'),
      tf.keras.layers.Dropout(.5),
      tf.keras.layers.Dense(1, activation='sigmoid')
    ])

    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])

错误消息:

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-9-c764c0cc3aa3> in <module>()
          9 ])
         10 
    ---> 11 model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])

    7 frames
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/checkpointable/base.py in _method_wrapper(self, *args, **kwargs)
        440     self._setattr_tracking = False  # pylint: disable=protected-access
        441     try:
    --> 442       method(self, *args, **kwargs)
        443     finally:
        444       self._setattr_tracking = previous_value  # pylint: disable=protected-access

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py in compile(self, optimizer, loss, metrics, loss_weights, sample_weight_mode, weighted_metrics, target_tensors, distribute, **kwargs)
        447             else:
        448               weighted_loss = training_utils.weighted_masked_objective(loss_fn)
    --> 449               output_loss = weighted_loss(y_true, y_pred, sample_weight, mask)
        450 
        451           if len(self.outputs) > 1:

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training_utils.py in weighted(y_true, y_pred, weights, mask)
        674       score_array = math_ops.reduce_sum(score_array)
        675       weights = math_ops.reduce_sum(weights)
    --> 676       score_array = math_ops.div_no_nan(score_array, weights)
        677     return K.mean(score_array)
        678 

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/util/dispatch.py in wrapper(*args, **kwargs)
        178     """Call target, and fall back on dispatchers if there is a TypeError."""
        179     try:
    --> 180       return target(*args, **kwargs)
        181     except (TypeError, ValueError):
        182       # Note: convert_to_eager_tensor currently raises a ValueError, not a

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py in div_no_nan(x, y, name)
       1025       raise TypeError("x and y must have the same dtype, got %r != %r" %
       1026                       (x_dtype, y_dtype))
    -> 1027     return gen_math_ops.div_no_nan(x, y, name=name)
       1028 
       1029 

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/gen_math_ops.py in div_no_nan(x, y, name)
       3020   # Add nodes to the TensorFlow graph.
       3021   _, _, _op = _op_def_lib._apply_op_helper(
    -> 3022         "DivNoNan", x=x, y=y, name=name)
       3023   _result = _op.outputs[:]
       3024   _inputs_flat = _op.inputs

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py in _apply_op_helper(self, op_type_name, name, **keywords)
        608               _SatisfiesTypeConstraint(base_type,
        609                                        _Attr(op_def, input_arg.type_attr),
    --> 610                                        param_name=input_name)
        611             attrs[input_arg.type_attr] = attr_value
        612             inferred_from[input_arg.type_attr] = input_name

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py in _SatisfiesTypeConstraint(dtype, attr_def, param_name)
         58           "allowed values: %s" %
         59           (param_name, dtypes.as_dtype(dtype).name,
    ---> 60            ", ".join(dtypes.as_dtype(x).name for x in allowed_list)))
         61 
         62 

    TypeError: Value passed to parameter 'x' has DataType float16 not in list of allowed values: float32, float64

然而,当我删除卷积层时,它编译模型时没有任何问题。

    model = tf.keras.models.Sequential([
       tf.keras.layers.Dense(256, activation='relu'),
       tf.keras.layers.Dropout(.5),
       tf.keras.layers.Dense(128, activation='relu'),
       tf.keras.layers.Dropout(.5),
       tf.keras.layers.Dense(1, activation='sigmoid')
    ])

    model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])

因此,这台机器显然能够运行float16,要让Conv2D在float16中工作,需要对Keras做什么特殊的事情吗?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56222435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档