2017-04-05 1 views
0

GPU 장치에서 Tensorflow 성능을 테스트하는 프로그램을 구현하려고합니다. 데이터 테스트는 MNIST 데이터이며, 다중 레이어 퍼셉트론 (신경망)을 사용하여 감독 된 교육입니다. I는 this simple example 따라하지만 그것은 정확도 율이 다르다는 것을 밝혀 코드Tensorflow가 동일한 코드이지만 CPU 장치에서 GPU 장치로 다른 결과가 발생합니다.

correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(y_,1)) 
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float")) 
print(sess.run(accuracy,feed_dict={x:mnist.test.images,y_:mnist.test.labels})) 
print(tf.convert_to_tensor(mnist.test.images).get_shape()) 

을 이용한 예측의 정확도를 체크 할 때 I 10000

for i in range(10000) : 
batch_xs, batch_ys = mnist.train.next_batch(100) 
sess.run(train_step,feed_dict={x : batch_xs, y_ : batch_ys}) 
if i % 500 == 0: 
    print(i) 
결국

에 성능 배치 구배의 수를 변경 CPU to GPU : CPU가 0.3xx 만 반환하는 동안 GPU가 대략 0.9xx의 정확도를 반환합니다. 이유를 아는 사람이 있습니까? 또는 왜 그런 문제가 발생할 수 있습니까?

+0

TensorBoard는이 문제를 디버깅하는 데 유용합니다. –

답변

3

이런 종류의 동작에는 (버그 외에) 두 가지 주된 이유가 있습니다.

수치 안정성

그것은 번호를 추가하는 것이 보일 수도로 완전히 쉽지 않다 것으로 나타났다. 조와 2 조를 합치고 싶다고합시다. 정답은 2 조이다. 그러나 이들을 부동 소수점 단위로 기계에 추가하면 잠시 후에 32 비트의 말로만 표현할 수 있습니다. 그러면 답이 더 작은 값으로 고정됩니다. 그 이유는 잠시 후에 추가하는 2가 부동 소수점 합계의 가수의 가장 작은 비트 아래에 있기 때문입니다.

이러한 종류의 문제는 수치 계산에 많이 들어 있으며,이 특정 불일치는 TensorFlow (1, 2 등)에 알려져 있습니다. 이 효과를보고있을 수도 있습니다. 신경 그물을 훈련

초기 조건은

확률 과정, 그리고 같은, 당신의 초기 조건에 따라 달라집니다. 때로는 특히 하이퍼 파라미터가 잘 조정되지 않으면 그물이 가난한 로컬 미니 마 근처에서 멈추고 평범한 행동으로 끝날 수 있습니다. 최적화 매개 변수를 조정하면 (또는 Adam과 같은 적응 형 방법을 사용하여) 여기에서 도움이 될 수 있습니다.

물론이 모든 것은 상당히 큰 차이이므로 기본 수학 패키지 또는 불운에 대해 비난하기 전에 결과를 다시 확인해야합니다.

+0

첫 문장에 매우 동의합니다. 나는 그 문제가 일반적으로 자주 발생하지 않는다고 가정한다. 내 문제를 밝혀 그러나 는 하나 넣을 수 있습니다 재현 결과를하기 위해 초기화 잘못된 – Hunter

+0

입니다 '''np.random.seed (1) tensorflow 가져 오기에서 이 set_random_seed set_random_seed (2)'''코드에서 . – bio

관련 문제