Я просматривал документы по тензорному потоку tf.nn.conv2d
здесь . Но я не могу понять, что он делает или чего пытается достичь. На документах сказано:
# 1: Выравнивает фильтр в 2-D матрицу с формой
[filter_height * filter_width * in_channels, output_channels]
,
Что это делает? Это поэлементное умножение или просто умножение матриц? Я также не мог понять другие два пункта, упомянутые в документах. Я написал их ниже:
# 2: Извлекает патчи изображения из входного тензора для формирования виртуального тензора формы
[batch, out_height, out_width, filter_height * filter_width * in_channels]
,№ 3: Для каждого патча, умножает вправо матрицу фильтра и вектор патча изображения.
Было бы очень полезно, если бы кто-нибудь мог привести пример, фрагмент кода (чрезвычайно полезный), может быть, и объяснить, что там происходит и почему операция такая.
Я попытался написать небольшую часть и распечатать форму операции. Тем не менее, я не могу понять.
Я попробовал что-то вроде этого:
op = tf.shape(tf.nn.conv2d(tf.random_normal([1,10,10,10]),
tf.random_normal([2,10,10,10]),
strides=[1, 2, 2, 1], padding='SAME'))
with tf.Session() as sess:
result = sess.run(op)
print(result)
Я понимаю кусочки сверточных нейронных сетей. Я изучал их здесь . Но реализация тензорного потока - не то, что я ожидал. Так что возник вопрос.
РЕДАКТИРОВАТЬ : Итак, я реализовал гораздо более простой код. Но я не могу понять, что происходит. Я имею в виду, как результаты, как это. Было бы чрезвычайно полезно, если бы кто-нибудь мог сказать мне, какой процесс дает этот вывод.
input = tf.Variable(tf.random_normal([1,2,2,1]))
filter = tf.Variable(tf.random_normal([1,1,1,1]))
op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding='SAME')
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print("input")
print(input.eval())
print("filter")
print(filter.eval())
print("result")
result = sess.run(op)
print(result)
вывод
input
[[[[ 1.60314465]
[-0.55022103]]
[[ 0.00595062]
[-0.69889867]]]]
filter
[[[[-0.59594476]]]]
result
[[[[-0.95538563]
[ 0.32790133]]
[[-0.00354624]
[ 0.41650501]]]]
tf.nn.conv2d()
, поэтому данный метод вообще не используется, когда мы используем TF с поддержкой GPU, еслиuse_cudnn_on_gpu=False
это не указано явно.