2017-10-13 4 views
0

심층 신경 네트워크 분류기가있는 TensorFlow의 MNIST 데이터 세트에서 작업 중입니다. 네트워크에 대해 다음 구조를 사용하고 있습니다.TensorFlow에서 MNIST 연구를위한 최상의 DNNCherassifier 구성

MNIST_DATASET = input_data.read_data_sets(mnist_data_path) 
train_data = np.array(MNIST_DATASET.train.images, 'int64') 
train_target = np.array(MNIST_DATASET.train.labels, 'int64') 
test_data = np.array(MNIST_DATASET.test.images, 'int64') 
test_target = np.array(MNIST_DATASET.test.labels, 'int64') 

classifier = tf.contrib.learn.DNNClassifier(
    feature_columns=[tf.contrib.layers.real_valued_column("", dimension=784)], 
    n_classes=10, #0 to 9 - 10 classes 
    hidden_units=[2500, 1000, 1500, 2000, 500], 
    model_dir="model" 
) 

classifier.fit(train_data, train_target, steps=1000) 

그러나 다음 줄을 실행할 때 40 %의 정확도를 나타 냈습니다.

accuracy_score = 100*classifier.evaluate(test_data, test_target)['accuracy'] 

어떻게 네트워크를 조정할 수 있습니까? 내가 뭔가 잘못한거야? 비슷한 학문은 학계에서 99 %의 정확성을 얻었다.

감사합니다.

답변

0

경험에 비추어 보면, MNIST 데이터 세트의 경우 완전히 연결된 네트워크에 숨겨진 레이어가 2 개 이상있는 것이 좋습니다. 즉 hidden_units=[500, 500]입니다. 그것은 90 % 이상의 정확성을 확보해야합니다.

무엇이 문제입니까? 모델 파라미터의 극단 수. 예를 들어, 두 번째 숨겨진 계층에는 (2500 * 1000 + 1000) 개의 매개 변수가 필요합니다. 경험 법칙은 훈련 가능한 매개 변수의 수를 훈련 예제의 수와 비교하거나 적어도 고전 기계 학습에서 그렇습니다. 그렇지 않으면 모델을 엄격하게 규칙 화하십시오.

여기서 취할 수있는 조치는 무엇입니까?

  • 더 간단한 모델을 사용하십시오. 숨겨진 단위 수 감소, 레이어 수
  • 더 적은 수의 매개 변수로 모델을 사용하십시오. 예를 들어 컨벌루션 레이어는 일반적으로 동일한 수의 유닛에 대해 훨씬 적은 수의 파라미터를 활용합니다. 예를 들어 3x3 커널을 가진 1000 convolutinal 뉴런은 1000 * (3 * 3 + 1) 매개 변수 만 필요합니다.
  • 정규화 적용 : 일괄 정규화, 입력에 노이즈 주입, 드롭 아웃, 중량 감쇠가 시작되는 좋은 예가 될 수 있습니다.
0

GitHub에서 최적의 구성을 찾습니다.

첫째, 최상의 구성은 아닙니다. 학문 연구 have already reached 시험 세트에 99.79 % 정확도.

classifier = tf.contrib.learn.DNNClassifier(
    feature_columns=feature_columns 
    , n_classes=10 
    , hidden_units=[128, 32] 
    , optimizer=tf.train.ProximalAdagradOptimizer(learning_rate=learning_rate) 
    , activation_fn = tf.nn.relu 
) 

또한 다음 매개 변수가 분류 자로 전송됩니다. 이와

epoch = 15000 
learning_rate = 0.1 
batch_size = 40 

는 모델에 trainset 97.83 테스트 세트의 accuray % 및 99.77 %의 정확도를 분류한다.