여기 나를 도울 수 있는지는 잘 모르지만 알아낼 수없는 문제가 있습니다. 나는 약 450,000 개의 엔트리를 가진 커다란 (나를 위해) 데이터 세트를 가지고있다.TFLearn - NaN 손실로 이어지는 대용량 데이터 집합
[217088.0, 212992.0, 696.0, 191891.0, 524.0, 320.0, 0.0, 496.0, 0, 0, 364.0, 20.0, 0, 1.0, 0, 0.0, 0, 4.0, 22.0, 0, 672.0, 46.0, 16.0, 0.0, 0.0, 106496.0, 8.0, 0, 4.0, 2.0, 26.0, 640.0, 0.0, 1073741888.0, 624.0, 516.0, 4.0, 3.0, 0, 4319139.0, 0.0, 0, 0.0, 36.0, 8.0, 217088.0, 0.0, 0, 0, 0, 4.0, 5.0, 0, 20.0, 255624.0, 65535.0, 5.10153058443, 396.0, 4319140.0, 552.0, 144.0, 28.0, 5.0, 1048576.0, 217088.0, 350.0, 0.0, 0, 7.0, 1048576.0, 260.0, 0, 116.0, 0, 322.0, 0.0, 0, 4319141.0, 0.0, 10.0, 0.0, 9.0, 4.0, 0, 0, 0, 6.36484131641, 0.0, 0, 11.0, 72.0, 372.0, 45995.0, 217088.0, 0, 4096.0, 12.0, 80.0, 592.0, 264.0, 0, 0, 4096.0, 0.0, 256.0, 0.0, 49152.0, 700.0, 0, 4096.0, 0, 0, 0.0, 336.0, 8.0, 0, 0.0, 0, 4319142.0, 0.0, 60.0, 308.0, 4319143.0, 0, 0, 0, 0, 0, 0.742746270768, 316.0, 420.0, 276.0, 1073741888.0, 0.0, 332.0, 284.0, 0, 1107296320.0, 0.0, 4.0, 13.0, 18.0, 0.0, 632.0, 424.0, 261200.0, 0.0, 299008.0, 0.0, 4096.0, 0, 0.0, 299008.0, 0, 658.0, 0, 4319144.0, 4319145.0, 12.0, 50.0, 292.0, 688.0, 484.0, 70.0, 20.0, 4319146.0, 16.0, 17.0, 0, 0, 0, 0.0, 18.0, 4.0, 330.0, 0.0, 0, 0.0, 42.0, 303104.0, 19.0, 8.0, 20.0, 0.0, 0.0, 544.0, 340.0, 0, 14.0, 0, 209078.0, 0.0, 0.0, 22.0, 0, 209078.0, 0.0, 0.0, 18932.0, 4319147.0, 4.58031739078, 0.0, 376.0, 0.0, 0, 632.0, 4.0, 0, 0, 0, 428.0, 0, 0, 323584.0, 0.0, 24.0, 4.0, 368.0, 12.0, 40.0, 0, 720.0, 4.0, 348.0, 267.0, 20468.0, 32.0, 45995.0, 303104.0, 0.0, 0.0, 0, 0, 224.0, 16.0, 4.0, 44.0, 0.0, 0.0, 444.0, 720.0, 0, 1180.0, 0.0, 16.0, 412.0, 0.0, 4.0, 8462.0, 600.0, 568.0, 16.0, 0, 2.0, 36.0, 0.0, 6.0, 0, 21.0, 0.0, 24.0, 0, 4.0, 652.0, 4319148.0, 92.0, 8.0, 2.0, 0, 0.0, 0, 16.0, 0, 0, 324.0, 4.0, 300.0, 0, 278.0, 400.0, 0, 0.0, 0, 352.0, 0, 0.0, 209078.0, 8.0, 4096.0, 8.0, 36.0, 0.0, 256.0, 268435456.0, 0.0, 48.0, 4319149.0, 6.0, 4319150.0, 0, 416.0, 0, 0, 283.0, 4.0, 0, 0, 0, 8.0, 592.0, 0, 0, 25.0, 0.0, 0, 0, 0.0, 332.0, 212992.0, 540.0, 512.0, 0, 532.0, 20.0, 26.0, 0.0, 0, 52.0, 440.0, 7.0, 488.0, 8.0, 12.0, 0.0, 60.0, 14.0, 3221225536.0, 7.0, 56.0, 432.0, 4.0, 0, 12.0, 0.0, 40.0, 680.0, 16.0, 504.0, 344.0, 576.0, 0.0, 452.0, 266240.0, 290816.0, 578.0, 0, 552.0, 34.0, 0.0, 636.0, 88.0, 698.0, 282.0, 328.0, 38.0, 8.0, 480.0, 64.0, 4319151.0, 0.0, 0.0, 34.0, 460.0, 64.0, 0, 612.0, 0.0, 4319152.0, 0, 604.0, 0, 436.0, 0, 0, 20.0, 0, 4.0, 0, 0, 0, 0, 40.0, 356.0, 584.0, 0, 84.0, 0.0, 0, 0, 0, 294912.0, 7.0, 29.0, 20.0, 0, 60.0, 0.0, 268.0, 536.0, 4319153.0, 0.0, 106.0, 456.0, 24.0, 404.0, 0, 31.0, 0, 380.0, 24.0, 648.0, 0.0, 0, 0, 0.0, 0, 0, 0, 0.0, 0, 0, 0.0, 0.0, 1883.0, 5.85655736551, 34.0, 17744.0, 28680.0, 38.0, 36.0, 0.0, 24576.0, 596.0, 107.0, 33.0, 4.0, 5.0, 0, 0, 45995.0, 384.0, 8.0, 0, 0, 500.0, 20468.0, 34.0, 312.0, 8.0, 660.0, 0.0, 35.0, 608.0, 0, 684.0, 8.0, 68.0, 0.0, 32.0, 34.0, 23117.0, 3.0, 520.0, 0, 4319154.0, 0, 0, 512.0, 8.0, 28.0, 4096.0, 0, 538.0, 0.0, 572.0, 0.0, 2.0, 36.0, 0.0, 0.0, 32.0, 32.0, 4.0, 28.0, 0, 4.0, 38.0, 68.0, 9.0, 0.0, 0, 0.0, 36.0, 39.0, 618.0, 0, 8.0, 266240.0, 4.0, 5.0, 34.0, 304.0, 0, 0.0, 20.0, 40.0, 0.0, 0.0, 0, 580.0, 556.0, 4.0, 8.0, 262.0, 0, 12.0, 32.0, 0, 76.0, 12.0, 184.0, 720.0, 4.0, 16.0, 644.0, 16.0, 28680.0, 4319155.0, 720.0, 0.0, 564.0, 392.0, 672.0, 0.0, 24.0, 492.0, 0, 0.0, 676.0, 0, 0, 0, 12.0, 592.0, 360.0, 8.0, 692.0, 552.0, 4.0, 36.0, 512.0, 7198.0, 42.0, 44.0, 45.0, 4319156.0, 20.0, 388.0, 476.0, 5.0, 36.0, 20480.0, 47.0, 16.0, 326.0, 0.0, 12.0, 0.0, 0.0, 7.0, 272.0, 280.0, 0.0, 0, 288.0, 48.0, 4319157.0, 10.0, 448.0, 4.0, 4.0, 0, 20468.0, 408.0, 2.0, 50.0, 560.0, 0, 1610612768.0, 8.0, 0, 620.0, 656.0, 4.0, 4096.0, 51.0, 0, 0, 0.0, 28.0, 0, 616.0, 0, 296.0, 2.0, 632.0, 468.0, 28.0, 32.0, 52.0, 0, 528.0, 0, 28.0, 0.0, 0, 24.0, 18.0, 4096.0, 0, 8.0, 180.0, 664.0, 4319158.0, 26.0, 0.0, 6.0, 0, 4096.0, 472.0, 0, 28.0, 72.0, 464.0, 672.0, 0, 24.0, 4.0, 0, 28680.0, 0, 0, 18.0, 0, 0, 4319159.0, 24.0, 28.0, 16.0]
내가, 예를 시도하고이 데이터의 떨어져 범주 모델을 만들 수 Tflearn을 사용하고 각 항목은 다음과 같은 형식에 대한 ~ 700 정수의 목록입니다 각 항목은 0 또는 1 레이블이 내가 알 수없는 항목이 0 또는 여기 1. 내 코드를 요약 한 것입니다 여부를 예측하는 모델을 훈련하기 위해 노력하고있어 :
def main():
## Options ##
num_tf_layers = 10 # Number of fully connected layers, ex. softmax layer
num_tf_layer_nodes = 32 # Number of nodes in the fully connected layers
print_test_scores = 1 # Bool to print test set and predictions
use_validation_set = 0 # Bool to use testing set when fitting
num_tf_epochs = 10
tf_batch_size = 1
tf_learn_rate = 0.001
## Opening files
print("Preparing labels...")
trainY = tflearn.data_utils.to_categorical(temp_train_Y, nb_classes=2)
if use_validation_set:
testY = tflearn.data_utils.to_categorical(temp_test_Y, nb_classes=2)
print('Forming input data...')
net = tflearn.input_data(shape=[None, len(trainX[0])])
print('Creating fully connected layers...')
for i in range(num_tf_layers):
net = tflearn.fully_connected(net, num_tf_layer_nodes)
print('Creating softmax layer...')
net = tflearn.fully_connected(net, 2, activation='softmax')
print('Preparing regression...')
net = tflearn.regression(net, learning_rate=tf_learn_rate)
print('Preparing DNN...')
model = tflearn.DNN(net)
print('Fitting...')
if use_validation_set:
model.fit(trainX, trainY, n_epoch=num_tf_epochs, batch_size=tf_batch_size, validation_set=(testX, testY), show_metric=True)
else:
model.fit(trainX, trainY, n_epoch=num_tf_epochs, batch_size=tf_batch_size, show_metric=True)
print('Complete...')
나는 떨어져이 따라 다음 TFlearn example. 이 프로그램은 250 0과 250 1의 작은 데이터 세트에서 아름답게 작동했습니다. 나는 정확도가 80 %로 높았으며, 더 많은 데이터를 추가하면 정확도를 높일 수 있다고 생각했습니다. 그러나 대량의 데이터를 추가 한 후에는 손실이 NaN으로 이동합니다. 450,000을 한 번에 반복하는 것조차 쉽지 않습니다. 약간의 연구 후에 나는 그것이 디폴트로 남겨 두었던 것처럼, 나는 너무 높은 학습 률을 보일 수도 있음을 알았다. 나는 0.1과 0.000001 사이에서 그것을 설정했고 아무것도 NaN으로가는 손실을 막지 못했습니다. 또한 배치 크기를 1에서 1024 사이로 변경하고 레이어 수를 3에서 20으로 변경했습니다. 아무 도움이되지 않았습니다. 누군가는 그것을 고치기 위해 무엇을 바꾸어야하는지, 어떻게 다르게 접근해야하는지에 대한 아이디어가 있습니까?
감사합니다.
소실 그라디언트 문제로 인해 손실이 폭발하지는 않지만 오히려 열악한 값으로 정체됩니다. 게다가, 그는 이미 선형 액티베이션을 사용하고있어서, 사라지는 그라디언트를 실제로 겪을 수는 없습니다. – timleathart
@timleathart 미분 값이 1보다 작은 활성화 함수 (Sigmoid and tanh) 때문에 소실 구배 문제가 발생할 수 있습니다. 따라서 OP가 OP를 사용한 경우 가능성이 있습니다. 나는 당신의 첫 번째 요점에 동의하며 그것을 반영하기 위해 나의 대답을 업데이트하고있다. 그 때문에 downvoted 경우, 나는 당신이 재검토 촉구합니다. 감사. –
OP는 숨겨진 레이어에 사용할 활성화 함수를 지정하지 않았으므로 기본적으로 TFLearn에서 S 자형 또는 탄젠트가 아닌 선형 활성화 'f (x) = x'가됩니다. 문제는 데이터 포인트가 매우 높기 때문에 학습률이 낮더라도 그라데이션 강하 중에 매우 큰 단계가 발생한다는 것입니다. 이것들은 datascience.stackexchange.com에서이 질문의 원래 게시물에 대한 내 대답에 대해 조언 한 훈련 전의 기둥으로 정규화해야합니다. – timleathart