我正在使用 Tensorflow 来训练 CNN。我目前的计算基于 Float32,这是初始化变量时的默认值。
我猜想通过使用 float64
作为我的 dtype 我可以获得更准确的结果,所以我改变了我的变量的初始化如下:
w1 = tf.Variable(tf.random_normal([5, 5, 3, 64], stddev=0.1, dtype=tf.float64))
但是我在
maxpool
操作中遇到以下错误:我查了
maxpool
文档,它接受值类型如下: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.
最佳答案
目前没有实现对 tf.nn.max_pool()
对单精度浮点值以外的类型的支持,文档不正确。 (我已经在上游更新了它,它应该很快就会出现在 GitHub 和网站上。)
不兼容的原因是 TensorFlow 出于性能原因在 GPU 上有一个 specialized implementation of max-pooling,而且我们在训练深度网络时几乎总是使用 tf.float32
,因此没有对其他类型的等效支持。可以添加,因此欢迎贡献:有关更多讨论,请参阅 GitHub issue。
关于python - Tensorflow MaxPool 不接受 float64,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34354126/