Я создал тензор, установленный в ноль, за исключением одной записи в [:, - 1, -1,0], для которой было установлено большое число 1e10.Затем я свернул тензор со случайным ядром.Когда размер пакета мал (например, 5), тогда вывод в [:, 0,0 ,:] равен нулю (потому что входной массив там равен нулю), но когда размер пакета велик (например, 100), тогда эти записи содержатчисла значительно больше нуля.Это происходит только на GPU.
import tensorflow as tf
import numpy as np
def test(sess):
w = np.random.uniform(size=(5,5,64,64)).astype(np.float32)
x_t = tf.placeholder(dtype=tf.float32, shape=(None, 32, 32, 64))
w_t = tf.constant(w)
o_t = tf.nn.conv2d(x_t, w_t, [1,1,1,1], 'VALID', data_format='NHWC')
x_good = np.zeros((5,32,32, 64), dtype=np.float32)
x_good[:,-1,-1,0] = 1e10
x_bad = np.zeros((100,32,32, 64), dtype=np.float32)
x_bad[:,-1,-1,0] = 1e10
o_good = sess.run(o_t, feed_dict={x_t : x_good})
o_bad = sess.run(o_t, feed_dict={x_t : x_bad})
print('Number nonzero (good): ', np.count_nonzero(o_good[:,0,0,:]))
print('Number nonzero (bad): ', np.count_nonzero(o_bad[:,0,0,:]))
if np.count_nonzero(o_bad[:,0,0,:]) > 0:
print(o_bad[0,0,0,:])
with tf.Session() as sess:
with tf.device('cpu:0'):
print('Testing on cpu -- should succeed')
test(sess)
with tf.device('gpu:0'):
print('Testing on gpu -- typically fails')
test(sess)