tf.keras.layers.Conv2D()无法使用设置为float16的keras后端

tf.keras.layers.Conv2D()无法使用设置为float16的keras后端,keras,conv-neural-network,half-precision-float,Keras,Conv Neural Network,Half Precision Float,我正在尝试用谷歌Colab(也尝试了特斯拉v100)培训CNN,keras后端设置为float16 tf.keras.backend.set_floatx('float16') 但它在使用Conv2D编译模型时抛出了一个错误 model=tf.keras.models.Sequential([ tf.keras.layers.Conv2D(16,(3,3),激活='relu',输入_形状=(300300,3)), tf.keras.layers.MaxPool2D(2,2), tf.keras

我正在尝试用谷歌Colab(也尝试了特斯拉v100)培训CNN,keras后端设置为float16

tf.keras.backend.set_floatx('float16')
但它在使用Conv2D编译模型时抛出了一个错误

model=tf.keras.models.Sequential([
tf.keras.layers.Conv2D(16,(3,3),激活='relu',输入_形状=(300300,3)),
tf.keras.layers.MaxPool2D(2,2),
tf.keras.layers.Dense(256,活化='relu'),
tf.keras.layers.Dropout(.5),
tf.keras.layers.Dense(128,活化='relu'),
tf.keras.layers.Dropout(.5),
致密层(1,激活='s形')
])
compile(优化器='adam',loss='binary\u crossentropy',metrics=['acc'])
错误消息:

---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
9 ])
10
--->11.model.compile(优化器='adam',loss='binary\u crossentropy',metrics=['acc'])
7帧
/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/checkpointable/base.py in_method_包装(self,*args,**kwargs)
440 self._setattr_tracking=False#pylint:disable=protected access
441尝试:
-->442方法(self,*args,**kwargs)
443最后:
444 self._setattr_tracking=以前的值#pylint:disable=受保护的访问
/编译中的usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py
447其他:
448加权损失=培训效用。加权掩盖目标(损失fn)
-->449输出损耗=加权损耗(y_真、y_pred、样本重量、掩码)
450
451如果透镜(自输出)>1:
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training\u utils.py in weighted(y_true,y_pred,weights,mask)
674分数数组=数学运算。减少总和(分数数组)
675权重=数学运算减少和(权重)
-->676分数数组=数学运算分区(分数数组,权重)
677返回K.均值(分数数组)
678
/包装器中的usr/local/lib/python3.6/dist-packages/tensorflow/python/util/dispatch.py(*args,**kwargs)
178“调用目标,如果出现类型错误,则返回调度程序。”
179尝试:
-->180返回目标(*args,**kwargs)
181除外(类型错误、值错误):
182#注意:将_转换为_急切_张量当前会引发一个值错误,而不是
/div_no_nan(x,y,name)中的usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py
1025 raise TypeError(“x和y必须具有相同的数据类型,获得%r!=%r”%
1026(x_数据类型,y_数据类型))
->1027返回gen_math_ops.div_no_nan(x,y,name=name)
1028
1029
/div_no_nan(x,y,name)中的usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/gen_math_ops.py
3020#将节点添加到TensorFlow图。
3021 u,u,_op=_op_def_lib._apply_op_helper(
->3022“DivNoNan”,x=x,y=y,name=name)
3023 _结果=_运算输出[:]
3024 _输入_平坦=_运算输入
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py in_apply_op_helper(self,op_type_name,name,**关键字)
608满足类型约束(基本类型,
609属性(操作定义,输入参数类型属性),
-->610参数名称=输入名称)
611属性[输入参数类型属性]=属性值
612根据[input_arg.type_attr]=input_name推断出的_
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/op_def_library.py in_SatisfiesTypeConstraint(数据类型、属性定义、参数名称)
58“允许的值:%s”%
59(参数名称,数据类型.as_数据类型(数据类型).name,
--->60“,”
61
62
TypeError:传递给参数“x”的值的数据类型float16不在允许值列表中:float32,float64
但是,当我删除卷积层时,它编译模型时没有任何问题

model=tf.keras.models.Sequential([
tf.keras.layers.Dense(256,活化='relu'),
tf.keras.layers.Dropout(.5),
tf.keras.layers.Dense(128,活化='relu'),
tf.keras.layers.Dropout(.5),
致密层(1,激活='s形')
])
compile(优化器='adam',loss='binary\u crossentropy',metrics=['acc'])

因此,该机器显然能够浮动16,是否需要对Keras进行任何特殊处理,以使Conv2D在浮动16中工作?

这似乎在最新tf夜间版本中得到了修复。
我能够使用TensorFlow版本“1.14.1-dev20190520”成功执行您的代码。
每晚为终端安装tf:
pip每晚安装tf

每晚为google colab安装tf:

!pip每晚安装tf

也许这个讨论会有所帮助:@marcoromelli我在这个线程中尝试了这个建议,但没有成功。这似乎是另一个问题。