Tensorflow在第一个隐藏层

时间:2017-07-14 19:33:26

标签: python machine-learning tensorflow neural-network

我正在使用这个例子: https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/examples/tutorials/input_fn/boston.py

使用完全相同的骨架制作测试脚本,除了我使用了UCI存储库中的数据集: https://archive.ics.uci.edu/ml/datasets/Airfoil+Self-Noise

但是我一直遇到NaN直方图错误:

InvalidArgumentError (see above for traceback): Nan in summary histogram
for: dnn/dnn/hiddenlayer_0_activation
[[Node: dnn/dnn/hiddenlayer_0_activation = HistogramSummary[T=DT_FLOAT,
_device="/job:localhost/replica:0/task:0/cpu:0"](dnn/dnn
/hiddenlayer_0_activation/tag, dnn/hiddenlayer_0/hiddenlayer_0/Relu)]] 

这是代码:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import itertools

import pandas as pd
import tensorflow as tf
import numpy
#import feature_column as fc

tf.logging.set_verbosity(tf.logging.INFO)

COLUMNS = ["freq", "angle", "chord", "velocity", "thic", "snd"]
FEATURES = ["freq", "angle", "chord", "velocity", "thic"]
LABEL = "snd"


def input_fn(data_set):
  feature_cols = {k: tf.constant(data_set[k].values) for k in FEATURES}
  labels = tf.constant(data_set[LABEL].values)
  return feature_cols, labels


def main(unused_argv):
  # Load datasets
  training_set = pd.read_csv("C:\\Users\\Aida\\Documents\\Visual Studio 2017\\Projects\\airfoil_train.csv", skipinitialspace=True,
                             skiprows=1, names=COLUMNS)
  test_set = pd.read_csv("C:\\Users\\Aida\\Documents\\Visual Studio 2017\\Projects\\airfoil_test.csv", skipinitialspace=True,
                         skiprows=1, names=COLUMNS)

  # prediction set
  prediction_set = pd.read_csv("C:\\Users\\Aida\\Documents\\Visual Studio 2017\\Projects\\airfoil_predict.csv", skipinitialspace=True,
                               skiprows=1, names=COLUMNS)

  # Feature cols
  feature_cols = [tf.contrib.layers.real_valued_column(k)
                  for k in FEATURES]

  # clip the gradients using gloal norms
  #list1 = 
  #global_norm1 = tf.global_norm(list1)
  #clipper = tf.clip_by_global_norm(list1, 1,  global_norm1, name=None)

  # Build 3 layer DNN with dropout
  regressor = tf.contrib.learn.DNNRegressor(feature_columns=feature_cols,
                                            hidden_units=[10, 10],
                                            model_dir="/tmp/airfoil_model",
                                            optimizer=tf.train.ProximalAdagradOptimizer(learning_rate=0.1, l1_regularization_strength=0.001)
                                            )

  # Fit
  regressor.fit(input_fn=lambda: input_fn(training_set), steps=3000)

  # Score accuracy
  ev = regressor.evaluate(input_fn=lambda: input_fn(test_set), steps=1)
  loss_score = ev["loss"]
  print("Loss: {0:f}".format(loss_score))

  # Print out predictions
  y = regressor.predict_scores(input_fn=lambda: input_fn(prediction_set))

  # .predict() returns an iterator; convert to a list and print predictions
  predictions = list(itertools.islice(y, 10))
  print("Predictions: {}".format(str(predictions)))

if __name__ == "__main__":
  tf.app.run()

我试图改变优化器的学习速度,你也可以看到,我也试过渐变剪辑,但这让我陷入了一个全新的陷阱。我甚至使用不同的数据创建了另一个完整的骨架,但它给了我同样的错误。它可能是我格式化数据集的方式,但我几乎完全遵循教程格式。 (如果需要,我可以发布CSV文件格式的图像。我现在没有足够的点来放置多个链接)

我尝试了原始的教程脚本,它工作得很好。我想知道错误是什么(用外行术语)以及它为什么会发生。

编辑:问题是通过删除CSV文件中的功能名称行来解决的,这是第一行,但这仍然是关于我怎么不能放 具有功能名称的行而不会导致读取错误。

为了知识,我仍然想知道它为什么会发生以及原始错误意味着什么

1 个答案:

答案 0 :(得分:0)

为什么要命名列?如果你需要按列特殊的方式做一些事情,你不能只使用索引吗?