Skip to main content
 首页 » 编程设计

python之Tensorflow MaxPool 不接受 float64

2024年08月23日30txw1958

我正在使用 Tensorflow 训练 CNN。我目前的计算基于 Float32,这是初始化变量时的一种默认设置。

我猜想通过使用 float64 作为我的 dtype 我可以获得更准确的结果,所以我改变了我的 varibales 的初始化如下:

w1 = tf.Variable(tf.random_normal([5, 5, 3, 64], stddev=0.1, dtype=tf.float64)) 

但我在 maxpool 操作中遇到以下错误: 我检查了 maxpool 文档,它接受如下值类型: value:形状为 [batch, height, width, channels] 且类型为 float32、float64、qint8、quint8、qint32 的 4-D 张量。

但是我收到以下错误。这是错误还是我做错了什么?

“MaxPool”Op 的输入“input”具有与预期的 float32 类型不匹配的 float64 类型。


Traceback (most recent call last): 
  File "/Users/hamedketabdar/LearningTensorFlow/CIFAR-Khodam/convolutional_network_batch_2d2c_clean_64f.py", line 213, in <module> 
    pred = conv_net(x, weights, biases, keep_prob) 
  File "/Users/hamedketabdar/LearningTensorFlow/CIFAR-Khodam/convolutional_network_batch_2d2c_clean_64f.py", line 153, in conv_net 
    conv1 = max_pool(conv1, k=2) # Normally K=2 
  File "/Users/hamedketabdar/LearningTensorFlow/CIFAR-Khodam/convolutional_network_batch_2d2c_clean_64f.py", line 135, in max_pool 
    return tf.nn.max_pool(img, ksize=[1, k, k, 1], strides=[1, k, k, 1], padding='SAME') 
  File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/nn_ops.py", line 235, in max_pool 
    name=name) 
  File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_nn_ops.py", line 449, in _max_pool 
    strides=strides, padding=padding, name=name) 
  File "/usr/local/lib/python2.7/site-packages/tensorflow/python/ops/op_def_library.py", line 430, in apply_op 
    (prefix, dtypes.as_dtype(input_arg.type).name)) 
TypeError: Input 'input' of 'MaxPool' Op has type float64 that does not match expected type of float32. 

请您参考如下方法:

当前未实现对单精度浮点值以外的类型的 tf.nn.max_pool() 支持,并且文档不正确。 (我已经更新到上游,应该很快就会出现在 GitHub 和网站上。)

不兼容的原因是 TensorFlow 有一个 specialized implementation of max-pooling出于性能原因在 GPU 上,我们几乎总是在训练深度网络时使用 tf.float32,因此没有对其他类型的等效支持。可以添加,因此欢迎贡献:参见 GitHub issue进行更多讨论。