나는 tf.nn.conv2d
여기 에 대한 tensorflow의 문서를보고 있었습니다 . 그러나 나는 그것이 무엇을하는지 또는 달성하려는 것을 이해할 수 없습니다. 문서에 나와 있습니다.
# 1 : 필터를 모양이있는 2 차원 행렬로 평탄화
[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)
나는 컨볼 루션 신경망의 비트와 조각을 이해합니다. 나는 그들을 여기 에서 공부했다 . 그러나 tensorflow의 구현은 내가 기대 한 것이 아닙니다. 그래서 질문을 제기했습니다.
편집 : 그래서 훨씬 간단한 코드를 구현했습니다. 그러나 나는 무슨 일이 일어나고 있는지 알 수 없습니다. 나는 결과가 어떻게 이런지를 의미합니다. 어떤 프로세스 가이 출력을 산출하는지 말해 줄 수 있다면 매우 도움이 될 것입니다.
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()
있으므로use_cudnn_on_gpu=False
명시 적으로 지정 하지 않으면 GPU 지원으로 TF를 사용할 때 문제의 방법이 전혀 사용되지 않습니다 .