от
Я использую Tensorflow Python, и я с помощью регрессионной модели ДНН на поезде по некоторым данным ушка. (https://archive.ics.uci.edu/ml/datasets/Abalone) Проблема, которая возникает, заключается в том, что даже после того, как я полностью обученную модель. Я хочу предсказать, какие значения некоторых тестовых данных. Я запускаю его один раз, и он показывает мне прогноз и цели, но если я снова запустите этот код (я использую Jupyter) он печатает очень разные значения. Иногда печать отрицательные значения, или иногда печатать все предсказания, как 0. Также обратите внимание, я узнал TensorFlow от курс Google, который имел некоторые устаревшие код, но я обновил некоторые соответствующие код на новые стандарты. У меня есть также модели линейной регрессии в моем коде, и это, кажется, работает хорошо. После тренировки, я предсказываю некоторые значения некоторые тестовые данные, и если я повторно запустить блок кода, он предсказывает те же значения. Также отметим, что обе модели говорят, что они работают во временном каталоге, но только в модели линейной регрессии на самом деле пишет что-то в указанном временном направлении, а ДНН регрессия не писать ничего вообще, но тренируется правильно (и даже при указании
model_dir
, до сих пор не писать ничего, так что я предполагаю, что это правильное поведение?). Обучение Код
def train_dnn_regression_model(
    learning_rate,
    regularization_strength,
    steps,
    batch_size,
    hidden_units,
    feature_columns,
    training_examples,
    training_targets,
    validation_examples,
    validation_targets,
    ):

    periods = 10
    steps_per_period = steps / periods

    #Initialize DNN Regressor
    optimizer = tf.train.FtrlOptimizer(learning_rate=learning_rate, l1_regularization_strength=regularization_strength)
    optimizer = tf.contrib.estimator.clip_gradients_by_norm(optimizer, 5.0)
    dnn_regressor = tf.estimator.DNNRegressor(
        feature_columns=feature_columns,
        hidden_units=hidden_units,
        optimizer=optimizer,
        activation_fn=tf.nn.leaky_relu
    )

    #Training Functions
    training_input_fn = lambda: input_fn(
        training_examples,
        training_targets,
        batch_size=batch_size) 
    predict_training_input_fn = lambda: input_fn(
        training_examples, 
        training_targets, 
        num_epochs=1, 
        shuffle=False)

    #Validation Function
    predict_validation_input_fn = lambda: input_fn(
        validation_examples, 
        validation_targets, 
        num_epochs=1, 
        shuffle=False)

    #Train Model
    training_rmse = []
    validation_rmse = []

    print("Training Model")
    for period in range(0, periods):
        linear_regressor.train(
            input_fn=training_input_fn,
            #Manually break total steps by 10
            steps=steps_per_period
        )

        #Use Sklearn to calculate RMSE
        training_predictions = linear_regressor.predict(input_fn=predict_training_input_fn)
        training_predictions = np.array([item['predictions'][0] for item in training_predictions])
        training_root_mean_squared_error = math.sqrt(metrics.mean_squared_error(training_predictions, training_targets))

        #Calculate Validation RMSE
        validation_predictions = linear_regressor.predict(input_fn=predict_validation_input_fn)
        validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])
        validation_root_mean_squared_error = math.sqrt(metrics.mean_squared_error(validation_predictions, validation_targets))

        #Append Losses
        training_rmse.append(training_root_mean_squared_error)
        validation_rmse.append(validation_root_mean_squared_error)

        print("Period:", period, "RMSE:", training_root_mean_squared_error)
    print("Training Finished")

    #Graph
    plt.ylabel("RMSE")
    plt.xlabel("Periods")
    plt.title("Root Mean Squared Error vs. Periods")
    plt.tight_layout()
    plt.plot(training_rmse, label="training")
    plt.plot(validation_rmse, label="validation")
    plt.legend()

    return dnn_regressor
Печать прогнозируемых значений и меток
def test_regression_model(model, test_examples, test_targets):
    predict_test_input_fn = lambda: input_fn(
        test_examples, 
        test_targets, 
        num_epochs=1, 
        shuffle=False)

    test_predictions = model.predict(input_fn=predict_test_input_fn)
    test_predictions = np.array([item['predictions'][0] for item in test_predictions])

    for prediction, label in zip(test_predictions, test_targets): 
        print("Prediction:", prediction, "Label:", label, "Diff:", abs(prediction 

Выполнение

#DNN Regressor
test_predictions_dnn_regressor = test_regression_model(dnn_regressor, test_examples, test_targets)
test_rmse_dnn_regressor = math.sqrt(metrics.mean_squared_error(test_predictions_dnn_regressor, test_targets))
print("Test RMSE:", test_rmse_dnn_regressor)
Я ожидал увидеть какой-то позитив, различные предсказания, которые согласуются за несколько казней, так что я могу адекватно диагностировать свою модель!

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...