MNIST 데이터 처리
그것은 훈련 데이터로 60,000 데이터, 테스트 데이터 10,000 데이터를 포함합니다. 데이터가 각각의 화상은 0-9의 수를 표시 설정, 이미지 크기는 28 * 28, 오른쪽 숫자는 픽처의 중앙에있다. tensorflow는 MNIST 데이터를 처리하는 클래스를 제공합니다.
한 핫 엔코딩
또한 효율적인 코딩으로 알려진 한 핫 엔코딩은 주로 N 비트 상태는 N 상태를 인코딩하는 레지스터 사용하고 한 번에 하나의 유효하다. 한 핫 인코딩은 바이너리 범주 변수 벡터로 표현된다. 이 분류 값이 정수 값으로 매핑됩니다 필요합니다. 그 다음, 정수 값들의 각각은 이진 벡터로 표현되고, 0으로 설정된다 정수 인덱스 외에, 그것은 1로 표시된다.
1 행 tensorflow.examples.tutorials.mnist 수입 input_data 2 3 mnist input_data.read_data_sets = ( ' 패스 /로 / MNIST_data / ' , one_hot = TRUE) # 得到一个mnist类 4 5 인쇄 ( ' 트레이닝 데이터의 크기 : ' , mnist. train.num_examples) 6 인쇄 ( " 검증 데이터 사이즈 : ' , mnist.validation.num_examples) 7 인쇄 ( " 테스트 데이터 사이즈 : ' , mnist.test.num_examples) 8 9 A =mnist.train.images [0] (10) # 28 * 28 = 784 = 크기, 화소 매트릭스는 범위 [0,1], 흰색 배경에 대한 컬러 비트 0을 나타내는 것은 검은 색 나타내는이다 . (11) 전단 ( ' 예 트레이닝 데이터 : ' , A, ' \ N- ' , ' 파일 크기 : ' , a.shape) (12)가 13 인 = B mnist.train.labels [0] (14) 이 전단 ( ' 예 트레이닝 데이터 레이블 : ' , ' \ N- ' , B, ' 크기 : ' , b.shape)
책 이동 평균 속도를 학습 감소, 정규화 교육의 모델을 사용하고, 예측 정확도를 비교했다.
다음과 같이 저는 여기에 이러한 기술을 사용하지 않은, 가장 간단한 훈련을 실시, 코드는 다음과 같습니다
. 1 # - * - 코딩 :. UTF-8 - * - 2 "" " . 3 은 Created 23 10 월 2019 년 21시 25분 30초에 물 ON입니다 . 4 . 5 . 삼층 완전히 연결 네트워크, 디지털 ID를 만들 수 6 개 용도 학습 속도 붕괴 , L2의 정규화는, 평균 모델을 이동하는 네트워크를 훈련 . 7 "" " . 8 오기 tensorflow의 TF를 그대로 . 9 에서 tensorflow.examples.tutorials.mnist 오기 Input_Data 10 . 11 INPUT_NODE 784 = 12이다 OUTPUT_NODE 10 = 13이다 # 은닉층 노드 14 LAYER1_NODE = 500 15 BATCH_SIZE = 100 16 LEARNING_RATE_BASE = 0.8 . 17LEARNING_RATE_DECAY = 0.99 18 REGULARIZATION_RATE = 0.0001 19 TRAINING_STEPS = 30000 20 MOVING_AVERAGE_DECAY = 0.99 21 learning_rate = 0.001 22 # 定义网络的前向传播, avg_class为滑动平均类 23 DEF feed_forward (input_tensor, avg_class, weights1, bias1, weights2, bias2) 24 의 경우 avg_class == 없음 : 25 레이어 1 = tf.nn.relu (tf.matmul (input_tensor, weights1) + bias1) 26 리턴 tf.matmul (레이어 1, weights2) + bias2 27 다른 : 28 = tf.nn.relu 레이어 1 (tf.matmul (input_tensor, avg_class.average (weights1)) + avg_class.average (Bias1)) 29 리턴 tf.matmul (레이어 1, avg_class.average (weights2)) + avg_class.average (Bias2 ) (30) (31)는 #의 훈련 모델 프로세스 32 #의 : DEF 트레인 (MNIST) (33)이 X = tf.placeholder (tf.float32 [없음, INPUT_NODE] NAME = " X-INPUT ' ) (34)는 Y_ = tf.placeholder (TF. float32 [없음, OUTPUT_NODE] NAME = ' 는 Y 출력 ' ) 35 #은 생성 은닉층 파라미터 tf.random_normal 36 #은 폐기 될 것이다보다 개의 표준 편차 값의 그것 tf.truncated_normal 평균 다르다 그리고 다시 선택 37 weights1 = tf.Variable (tf.random_normal ([INPUT_NODE, LAYER1_NODE] = DTYPE tf.float32)) 38 인 Bias1 = tf.Variable (tf.constant (0.1 모양 = [LAYER1_NODE])) 39 weights2 = tf.Variable (tf.random_normal ([LAYER1_NODE, OUTPUT_NODE] = DTYPE tf.float32)) 40 Bias2 = tf.Variable (tf.constant (0.1 모양 = [OUTPUT_NODE])) (41)은 Y = feed_forward (X, 없음, weights1, Bias1 , weights2, Bias2) 42 인 (학습 가능한 = 0 global_step tf.Variable = FALSE) (43)가 44 인 #는 평균 부, 평균값을 움직임 계산 .apply 기초하여 이동 평균 (가변) 이동, 이동 평균을 기반 .average (변수) 보통 전화를 움직이는 ? 45 # tf.argmax은 (텐서는 축) 축 치수는 텐서의 최대의 인덱스를 반환 46은 47 #은 L2 정규화 손실 함수는, 일반적으로, 바이어스 항을 계산하지 신경망 정규화 손실의 우측의 중량을 계산 산출 48 개 # 랭크 logits의 랭크 -1 같아야 라벨 49 cross_entropy tf.nn.sparse_softmax_cross_entropy_with_logits = ( = tf.argmax 라벨 (Y_ ,. 1) logits = Y) (50) 손실 = cross_entropy 51는 52이다 train_step = tf.train.GradientDescentOptimizer (learning_rate) .minimize (손실 global_step = global_step) (53)는 54 #의 이동 평균의 사용, 모든 역 전파를 통해 신경 네트워크의 매개 변수를 업데이트 할뿐만 아니라 각 매개 변수의 이동 평균을 업데이트 다시 데이터를 모두 필요로한다. 55 # 한번에 조작하는 복수는 tensorflow 제공 tf.group tf.contol_dependencies 및기구 (56)는 57 #의 tf.cast (참, tf.float32) = 1.0 tf.cast (거짓, tf.float32) = 0.0 58 correct_prediction = tf.equal (tf.argmax (Y, 1), tf.argmax (Y_, 1 )) (59) 정확도 = tf.reduce_mean (tf.cast (correct_prediction, tf.float32)) 60 61 tf.Session와 ( )로서 SESS : 62 . tf.initialize_all_variables () 실행 () 63 64 validate_feed = {X : mnist.validation.images, Y_ : mnist.validation.labels} 65 test_feed = {X : mnist.test.images, Y_ : mnist .test.labels} (66) (67) 에 대한 I 의 범위 (TRAINING_STEPS) : 68 의 경우 I ~ 1000 == 0 : 69 validation_acc = sess.run (정확도 = feed_dictvalidate_feed) (70) 이 전단 ( ' 트레이닝 %가 D를 단계 후에 G 검증 % 정확도는 ' % ) (I, validation_acc) (71)는 #의 MNIST 클래스 기능 next_batch 제공 72 XS를, YS = mnist.train.next_batch (BATCH_SIZE)는 73이다 sess.run (train_step가 feed_dict가 = {X : XS, Y_ : YS}) 74 75 # 트레이닝 후에는, 테스트 세트는 테스트 된 76 test_acc = sess.run (정확성 feed_dict = test_feed)는 77 인쇄 ( " 훈련 후 D %의 단계 % 정확도 테스트 G IS ' % (TRAINING_STEPS, test_acc)) 78 79 #主程序 80 # DEF 본체 (ARGV = 없음) : 81 # mnist input_data.read_data_sets = ( '/ mnistdata'one_hot = TRUE) 82 # 트레인 (mnist) 83 84 # 경우 __name__ == '__main__': 85 #의 TF. app.run () 86