【问题标题】:Tensorflow MaxPool doesn't accept float64TensorFlow MaxPool 不接受 float64
【发布时间】:2023-03-21 09:28:01
【问题描述】:

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

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

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

但我在maxpool操作中收到以下错误: 我破解了maxpooldocumentation,它接受的值类型如下: value: A 4-D Tensor with shape [batch, height, width, channels] and type float32, float64, qint8, quint8, qint32.

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

Input 'input' of 'MaxPool' Op has type float64 that does not match expected type of float32.


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.

【问题讨论】:

标签: python tensorflow


【解决方案1】:

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

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

【讨论】:

  • 可惜了。不仅文档在愚弄我(说tf.nn.max_pool() 允许tf.float64),而且对 64 位浮点数兴趣不大。我不是太有经验,但我希望(对于真正的大/深网络)64 位浮点数能在更少的训练周期内产生更好的结果,因为精度要高得多?!
猜你喜欢
  • 2021-04-07
  • 1970-01-01
  • 2017-09-20
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多