Я смотрел на документы тензорного потока около tf.nn.conv2d
здесь. Но я не могу понять, что он делает или чего он пытается достичь. Он говорит о документах,
# 1: сглаживает фильтр на двумерной матрице с формой
[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]]]]