기계 학습 및 파이썬에 대한 배경 지식이 있지만 TensorFlow를 배우는 중입니다. 나는 tutorial on deep convolutional neural nets을 통해 이미지 분류에 사용하는 방법을 스스로 가르쳐야 할 것입니다. 그 길을 따라 가면서 나는 문제를 풀고있다.TensorFlow CNN 튜토리얼 : 로컬 레이어에 연결하기 위해 상단 레이어를 편집하는 방법은 무엇입니까?
연습 : 추론()의 모델 아키텍처는 cuda-convnet에 지정된 CIFAR-10 모델과 약간 다릅니다. 특히, Alex의 원래 모델의 최상위 레이어는 로컬로 연결되어 있으며 완전히 연결되어 있지 않습니다. 아키텍처를 편집하여 최상위 계층에 로컬로 연결된 아키텍처를 정확하게 재현 해보십시오.
연습 문제는 cifar10.py model의 inference() 함수를 참조하십시오. 두 번째 레이어부터 마지막 레이어 (local4라고 함)는 shape = [384, 192]이고, 최상위 레이어는 shape = [192, NUM_CLASSES]입니다. 여기서 NUM_CLASSES = 10입니다. 나는 우리가 편집하도록 요청 코드가 상위 레이어를 정의하는 코드 어딘가에 생각 :
with tf.variable_scope('softmax_linear') as scope:
weights = _variable_with_weight_decay('weights', [192, NUM_CLASSES],
stddev=1/192.0, wd=0.0)
biases = _variable_on_cpu('biases', [NUM_CLASSES],
tf.constant_initializer(0.0))
softmax_linear = tf.add(tf.matmul(local4, weights), biases,name=scope.name
_activation_summary(softmax_linear)
하지만 층 사이 연결의 가능성을 결정하는 코드가 표시되지 않기 때문에 나도 몰라 모델을 완전히 연결된 상태에서 로컬로 연결된 상태로 바꿀 수있는 방법. 누군가 이것을하는 방법을 알고 있습니까?
이 답변은이 문제를 해결하지 못합니다. W 행렬은 "다중 대역"이어야합니다. 예를 들어, 필터가 3x3이면 3 개의 대각선, 각각 3 개의 요소 폭이 있어야합니다. tf.matrix_band_part()는 하나의 밴드 만 허용합니다. 또한 W의 차원이 변경되므로 원본 W를 가져 와서 일부 요소를 0으로 설정할 수 없습니다. 특히 W의 행 수는 병합 된 출력 특성 맵의 길이와 같아야합니다. 저는 Xyand의 대답이 더 나은 접근법이라고 생각합니다. 이미지 패치를 추출하고 각각의 커널에 곱하기 때문에 텐서가 두 개의 추가 차원을 얻습니다 (6D가 됨). – MichaelSB
충분합니다. 이것은 제가이 운동을 해결하는 방법에 대한 단서를 제공하기 위해 수학에 대한 일종의 이해를 얻으려고하는 것입니다. 연습 문제는 사람들로 하여금 스스로 생각하게하는 것이라고 생각합니다. 따라서 실제로 복사/붙여 넣기가 가능한 코드를 제공하지는 않았지만 이것이 이론적으로 어떻게 접근 할 수 있는지에 대한 기본적인 이해를 돕습니다. 공학이 아니라 신경망으로 작업 할 때 선형 대수학의 일부를 이해하면 도움이됩니다. –
로컬로 연결된이 계층을 처리 한 지 꽤 오래되었습니다. 그러나 @DavidPickup에 의한 접근법은 전체 행렬에 상수 지시 행렬을 곱한 멀티 밴드 행렬을 시뮬레이트하여 실제로 작동 할 수 있습니다. W의 크기는 (w_out * h_out) X (w_in * h_in * d_in) 여야합니다. 그러나 그것은 꽤 낭비적인 것처럼 보인다. 내가 놓친 게 있니? – Xyand