Тензор потока: train_and_evaluate всегда производит убыток 0 - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть проект, использующий стандартную оценку в Tensorflow и пытающийся создать метод train_and_evaluate.

estimator = tf.estimator.DNNClassifier(
    feature_columns=my_feature_columns,
    hidden_units=hidden_units,
    model_dir=model_dir,
    optimizer=tf.train.ProximalAdagradOptimizer(learning_rate=0.01,l1_regularization_strength=0.001))

Каждый раз, когда я вижу вывод консоли, это показывает, что потери всегда равны нулю.

INFO:tensorflow:loss = 2.896826e-06, step = 875
INFO:tensorflow:global_step/sec: 5.96785
INFO:tensorflow:loss = 1.9453131e-05, step = 975 (16.756 sec)
INFO:tensorflow:global_step/sec: 7.2834
INFO:tensorflow:loss = 8.6957414e-05, step = 1075 (13.730 sec)
INFO:tensorflow:global_step/sec: 7.36042
INFO:tensorflow:loss = 0.0004585028, step = 1175 (13.586 sec)
INFO:tensorflow:global_step/sec: 7.38419
INFO:tensorflow:loss = 0.0012249642, step = 1275 (13.542 sec)
INFO:tensorflow:global_step/sec: 7.3658
INFO:tensorflow:loss = 0.002194246, step = 1375 (13.576 sec)
INFO:tensorflow:global_step/sec: 7.33054
INFO:tensorflow:loss = 0.0031063582, step = 1475 (13.641 sec)

Это произошло после того, как я изменил свой input_fn (я загружал CSV в Dataframe pandas и работал оттуда, однако мой общий набор данных превышал 10 ГБ (в размерах 800x1500000) и каждый раз, когда яПри сохранении модели размер папки модели был очень большим (более 200 ГБ), поэтому я решил использовать вместо этого итераторы (я нашел эту функцию ввода в учебнике где-то, и она хорошо работает):

def input_fn_train(filenames,
                        num_epochs=None,
                        shuffle=True,
                        skip_header_lines=0,
                        batch_size=200,
                        modeTrainEval=True):
    filename_dataset = tf.data.Dataset.from_tensor_slices(filenames)
    if shuffle:
        filename_dataset = filename_dataset.shuffle(len(filenames))
    dataset = filename_dataset.flat_map(lambda filename: tf.data.TextLineDataset(filename).skip(skip_header_lines))
    dataset = dataset.map(parse_csv)
    if shuffle:
        dataset = dataset.shuffle(buffer_size=batch_size * 10)
    dataset = dataset.repeat(num_epochs)
    dataset = dataset.batch(batch_size)
    iterator = dataset.make_one_shot_iterator()
    features = iterator.get_next()
    features, labels = features, features.pop(LABEL_COLUMN)
    if not modeTrainEval:
        return features, None
    return features, labels

К сожалению, это изменение привело к тому, что мои потери всегда были равны нулю, и, как следствие, прогнозы ужасно плохи (точность 50%), и я не могу найти причину.

(github )ссылка с образцом набора данных и моим кодом)

...