CNN은 학습하는 데 시간이 걸릴 수 있으므로 교육 중에 진행 상황을 추적할 수 있도록 로깅을 설정해 보겠습니다. 텐서플로우의 tf.train.SessionRunHook을 사용하여 CNN의 소프트맥스 계층에서 확률 값을 기록하는 tf.train.LoggingTensorHook을 만들 수 있습니다. main() 다음에 추가: TensorFlow를 사용하면 텐서와 직접 협력하여 처음부터 신경망을 구축할 수 있습니다. 그러나 매우 복잡할 수 있는 이러한 하위 수준 API를 사용하는 대신 TensorFlow는 상위 수준 추정기 API로 작업하는 것이 좋습니다. 이를 통해 더 높은 수준의 추상화에서 개체를 정의할 수 있으므로 딥 러닝 구조를 만들고 학습할 수 있습니다. TensorFlow라는 이름은 인공 신경망이 다차원 데이터 배열에서 수행하는 추가 또는 곱하기와 같은 작업에서 파생됩니다. 이러한 배열을 이 프레임워크의 텐서라고 하며, 이는 앞에서 본 것과 약간 다릅니다. 컨볼루션 신경망(CNN)은 컴퓨터 비전 및 이미지 분류의 기초입니다. TensorFlow를 사용하면 엄청난 유연성을 갖춘 CNN 아키텍처를 구축할 수 있지만 처음에는 다소 어려울 수 있습니다. 우리는 우리가 텐서 _to_log에 로그인 할 텐서의 dict을 저장합니다.
각 키는 로그 출력에 인쇄될 당사의 선택 레이블이며 해당 레이블은 TensorFlow 그래프의 텐서 이름입니다. 여기서 우리의 확률은 cnn_model_fn에서 확률을 생성할 때 softmax_tensor에서 찾을 수 있습니다. TensorFlow 계산 그래프는 딥 러닝 모델을 학습하는 동안 발생하는 작업의 흐름을 나타냅니다. CNN 모델의 경우 계산 그래프는 매우 복잡할 수 있습니다. 다음은 간단한 그래프의 예입니다. 텐서보드를 사용하여 모델의 계산 그래프를 시각화할 수 있습니다. TensorFlow에서 작성하는 모든 코드 줄은 계산 그래프를 거쳐야 합니다. 위의 그림에서와 같이, 당신은 첫 번째 $W $ $x $ 곱해 얻을 다음 $W $ 및 $x 달러의 출력에 추가되는 $b $ 온다 볼 수 있습니다.
$b$로 $W$$x$의 출력을 추가한 후 softmax 함수가 적용되고 최종 출력이 생성됩니다. 이 경우 tf.float32를 사용하여 데이터 형식을 명시적으로 제공했습니다. 따라서 이 데이터 형식은 32비트 형태로 저장되는 단일 정밀도입니다. 그러나 첫 번째 예제와 마찬가지로 이 작업을 수행하지 않는 경우 TensorFlow는 초기화 된 값에서 상수 / 변수의 형식을 유추합니다. TensorFlow는 처음 몇 줄에서 정렬되는 MNIST 데이터에 대한 편리한 로더를 가지고 있습니다. 그 후 최적화 동작 (학습 속도, 배치 크기 등)을 결정하는 몇 가지 변수 선언이 있습니다. 다음으로 이미지 입력 데이터 x에 대한 자리 표시자(자리 표시자 설명에 대한 이 자습서 참조)를 선언합니다. 이미지 입력 데이터는 이미지의 평평한 28×28=784 노드, 단일 채널 그레이스케일 표현을 제공하는 mnist.train.nextbatch() 함수를 사용하여 추출됩니다. 그러나 TensorFlow 컨볼루션 및 풀링 함수에서 이 데이터를 사용하기 전에 conv2d() 및 max_pool()과 같은 기능을 사용하여 이러한 함수가 4D 데이터만 사용하므로 데이터를 다시 모양을 조정해야 합니다.