我正在尝试构建一个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
但它之后仍然会运行。 非常感谢!
更新: 我注意到有些输入列都是零。当我删除它们时,网络会学习并收敛。我试图将这些列作为分类列(二进制)输入,但这也使得学习不会收敛。