【发布时间】:2019-10-13 06:45:13
【问题描述】:
我正在使用 TensorFlow 2.0 设置 DNN 模型并使用 AdaNet(0.8 版)进行 NAS。如何使用 AdaNet 提高 DNN 模型的准确性?
由两个不同 DNN 子网组合而成的 AdaNet 生成模型的指标比单个 DNN 模型的指标差。我已经尝试调整参数,包括 max_iteration_steps 和 AutoEnsembleEstimator 训练步骤,但它似乎不起作用。
from __future__ import absolute_import, division, print_function, unicode_literals
import numpy as np
import tensorflow as tf
import adanet
# load data
(x_train, y_train), (x_test, y_test) = (
tf.keras.datasets.boston_housing.load_data())
# input_fn
def input_fn(partition):
def _input_fn():
feat_tensor_dict = {}
if partition == 'train':
x = x_train.copy()
y = y_train.copy()
else:
x = x_test.copy()
y = y_test.copy()
for i in range(0,np.size(x,1)):
feat_nam = ('feat'+str(i))
feat_tensor_dict[feat_nam] = tf.convert_to_tensor(x[:,i], dtype=tf.float32)
label_tensor = tf.convert_to_tensor(y, dtype=tf.float32)
return (feat_tensor_dict,label_tensor)
return _input_fn
feat_nam_lst = ['feat'+str(i) for i in range(0,np.size(x_train,1))]
feature_columns = []
for item in feat_nam_lst:
feature_columns.append(tf.feature_column.numeric_column(item))
head = tf.estimator.RegressionHead
# Build subnetwork
dnn_estimator_1 = tf.estimator.DNNRegressor(
feature_columns = feature_columns,
hidden_units=[100, 500, 100])
dnn_estimator_2 = tf.estimator.DNNRegressor(
feature_columns = feature_columns,
hidden_units=[200, 300, 100])
# Build AdaNet
estimator = adanet.AutoEnsembleEstimator(
head=head,
candidate_pool=lambda config: {
"dnn1": dnn_estimator_1,
"dnn2":dnn_estimator_2 },
max_iteration_steps=1000)
estimator.train(input_fn=input_fn(partition = 'train'), steps=10)
metrics = estimator.evaluate(input_fn=input_fn(partition = 'test'),steps = 1000)
best_ensemble_index_0 = 1,global_step = 10,迭代 = 0,标签/平均值 = 23.078432,损失 = 65.15532,预测/平均值 = 22.63752
dnn_estimator_1.train(input_fn=input_fn(partition = 'train'), steps=1000)
dnn_estimator_1.evaluate(input_fn=input_fn(partition = 'test'), steps=1000)
{'average_loss': 37.712597, “标签/平均值”:23.078432, “损失”:37.712288, “预测/平均值”:23.500063, 'global_step': 1000}
AdaNet 的输出指标应该更好。但结果恰恰相反。
【问题讨论】:
标签: python tensorflow tensorflow-estimator adanet