1

我正在尝试构建一个 DNNRegressor 来学习 196 个特征来预测 1 个标签,所有实数。

我尝试了多种不同的馈送数据和批次,但似乎没有任何效果...... fit() 的输出保持不变INFO:tensorflow:loss = 1.59605e+32,当尝试预测相同的训练数据时,输出超出了我的标签范围(即在 -1.7 到 2.6 之间,但我得到如下预测:2.9873503e+09)

谁能帮忙,我做错了什么?

我的代码如下:

import pandas as pd
import tensorflow as tf

df_train = pd.read_csv("...", delimiter="\t", index_col=0)
LABEL = 'y'
COLUMNS = list(df_train.columns.values)
COLUMNS = filter(lambda a: a != LABEL, COLUMNS)

def my_input_fn(df):
    continuous_cols = {k: tf.constant(df[k].values, shape=[df[k].size, 1]) for k in COLUMNS}
    labels = tf.constant(df[LABEL].values)
    return continuous_cols, labels

continuous_features = [tf.contrib.layers.real_valued_column(k) for k in COLUMNS]
regressor = tf.contrib.learn.DNNRegressor(feature_columns=continuous_features, hidden_units=[20,10], model_dir="...")
regressor.fit(input_fn=lambda: my_input_fn(df_train), steps=20000)
results = regressor.evaluate(input_fn=lambda: my_input_fn(df_test),steps=1)

我在 gpu 支持下运行 tf。我注意到的一件事是,当第一次调用 fit() 函数时,我得到:

E tensorflow/stream_executor/cuda/cuda_driver.cc:1002] failed to allocate 3.94G (4233691136 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY
E tensorflow/stream_executor/cuda/cuda_driver.cc:1002] failed to allocate 3.94G (4233691136 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY
E tensorflow/stream_executor/cuda/cuda_driver.cc:1002] failed to allocate 3.94G (4233297920 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY

但在那之后它仍然运行。非常感谢!

更新:我注意到一些输入列全为零。当我删除它们时,网络会学习并收敛。我尝试将这些列输入为分类列(二进制),但这也使学习不收敛。

4

0 回答 0