Machine learning TensorFlow培训不起作用:模型无法学习数据

Machine learning TensorFlow培训不起作用:模型无法学习数据,machine-learning,tensorflow,neural-network,deep-learning,regression,Machine Learning,Tensorflow,Neural Network,Deep Learning,Regression,我有一个超过1700万次观测的数据集,我正试图用它来训练一个dnnRecessor模型。然而,培训根本不起作用。损失大约为10^15,这太可怕了。几周来我一直在尝试不同的事情,无论我做什么,我都无法让损失减轻 例如,在训练后,我使用训练数据时使用的相同观察值之一进行测试预测。预期结果为140944.00,但预测结果为-169532.5,这是不合理的。训练数据中甚至没有任何负值,我不明白它怎么会这么差 以下是一些示例培训数据: 金额贡献服务类型百分位时间结果 214871.00 3501.00 S

我有一个超过1700万次观测的数据集,我正试图用它来训练一个
dnnRecessor
模型。然而,培训根本不起作用。损失大约为10^15,这太可怕了。几周来我一直在尝试不同的事情,无论我做什么,我都无法让损失减轻

例如,在训练后,我使用训练数据时使用的相同观察值之一进行测试预测。预期结果为
140944.00
,但预测结果为
-169532.5
,这是不合理的。训练数据中甚至没有任何负值,我不明白它怎么会这么差

以下是一些示例培训数据:

金额贡献服务类型百分位时间结果
214871.00 3501.00 SM23高50 17807828.00
214871.00 3501.00 SM23高51 19216520.00
214871.00 3501.00 SM23高52 19676064.00
214871.00 3501.00 SM23高53 21038840.00
214871.00 3501.00 SM23高54 22248295.00
214871.00 3501.00 SM23高55 22412713.00
28006.00 83.00 SM0 i_低0 28006.00
28006.00 83.00 SM0 i_低1 28804.00
28006.00 83.00 SM0 i_低2 30140.00
28006.00 83.00 SM0 i_低3 31598.00
28006.00 83.00 SM0 i_低4 33130.00
28006.00 83.00 SM0 i_低5 34663.00
这是我的代码:

feature\u列=[
tf.feature\u column.numeric\u column('Amount',dtype=dtypes.float32),
tf.feature\u column.numeric\u column('Contribution',dtype=dtypes.float32),
tf.feature\u column.embedding\u column(
tf.feature\u column.categorical\u column\u与词汇表(
“服务类型”,
[
“SM0”、“SM1”、“SM2”、“SM3”,
‘SM4’、‘SM5’、‘SM6’、‘SM7’,
‘SM8’、‘SM9’、‘SM10’、‘SM11’,
‘SM12’、‘SM13’、‘SM14’、‘SM15’,
‘SM16’、‘SM17’、‘SM18’、‘SM19’,
“SM20”、“SM21”、“SM22”、“SM23”
],
dtype=dtypes.string
),
尺寸=16
),
tf.feature\u column.embedding\u column(
tf.feature\u column.categorical\u column\u与词汇表(
“百分位”,
['i_low'、'low'、'mid'、'high'],
dtype=dtypes.string
),
尺寸=16
),
tf.feature\u column.numeric\u column('Time',dtype=dtypes.int8)
]
模型=tf.estimator.dnnRecessor(
隐藏单位=[64,32],
要素列=要素列,
model_dir=os.getcwd()+“\job”,
标签尺寸=1,
重量\列=无,
优化器='Adagrad',
激活\u fn=tf.nn.elu,
辍学=无,
输入\层\分区器=无,
config=RunConfig(
主=无,
核数=4,
log\u device\u placement=False,
gpu_内存_分数=1,
tf_random_seed=无,
保存\u摘要\u步骤=100,
保存检查点\u秒=0,
保存检查点\u步骤=无,
保持检查点最大值为5,
每小时保持检查点=10000,
记录步数步数步数=100,
评估_master=“”,
model_dir=os.getcwd()+“\job”,
会话配置=无
)
)
打印(‘培训…’)
模型.列车(输入=获取输入(“列车”),步数=100000)
打印('评估…'))
模型。评估(输入=获取输入('test'),步骤=4000)
打印('预测…')
预测=模型.predict(输入\u fn=获取\u输入\u fn('predict'))
打印(列表(预测))
输入fn
的计算如下:

def split_input():
data=pd.read\u csv('C:\\all\u data.txt',sep='\t')
x=数据。下降('结果',轴=1)
y=数据。结果
返回列车试验分离(x,y,试验尺寸=0.2,随机状态=123)
def get_input_fn(输入类型):
列车x,测试列车x,列车y,测试列车y=拆分输入()
如果输入类型=‘列车’:
返回tf.estimator.inputs.pandas\u input\u fn(
x=列车x,
y=列车y,
num_epochs=无,
洗牌=真
)
elif输入类型==“测试”:
返回tf.estimator.inputs.pandas\u input\u fn(
x=测试x,
y=测试y,
num_epochs=1,
洗牌=错误
)
elif输入类型==“预测”:
返回tf.estimator.inputs.pandas\u input\u fn(
x=pd.DataFrame(
{
“金额”:52050.00,
“贡献”:1394.00,
“服务类型”:“SM0”,
“百分位”:“i_低”,
“时间”:5
},
索引=[0]
),
num_epochs=1,
洗牌=错误
)
结果如下:

培训。。。
信息:tensorflow:损耗=6.30944e+15,步长=1
信息:tensorflow:global_step/sec:457.091
信息:tensorflow:损耗=3.28245e+15,步长=101(0.219秒)
信息:tensorflow:全局步长/秒:533.271
信息:tensorflow:损耗=2.65647e+15,步长=201(0.188秒)
信息:tensorflow:全局步长/秒:533.274
...
信息:tensorflow:损耗=1.06601e+15,步长=99701(0.203秒)
信息:tensorflow:global_step/sec:533.289
信息:tensorflow:损耗=2.12652e+15,步长=99801(0.188秒)
信息:tensorflow:global_step/sec:533.273
信息:tensorflow:损耗=1.31647e+15,步长=99901(0.203秒)
信息:tensorflow:将100000的检查点保存到C:\projection\u model\job\model.ckpt。
信息:tensorflow:最后一步损失:2.88956e+15。
评价。。。
信息:tensorflow:评估[1/4000]
信息:tensorflow:评估[2/4000]
信息:tensorflow:评估[3/4000]
...
信息:tensorflow:评估[3998/4000]
信息: