Tensorflow DNNclassifier: error wile training (numpy.ndarray has no attribute index)

。_饼干妹妹 提交于 2020-04-13 03:44:49

问题


I am trying to train a DNNClassifier in tensorflow

Here is my code

train_input_fn = tf.estimator.inputs.pandas_input_fn(
    x=X_train,
    y=y_train,
    batch_size=1000,
    shuffle = True
)


nn_classifier = tf.estimator.DNNClassifier(hidden_units=[1300,1300,1300], feature_columns=X_train, n_classes=200)
nn_classifier.train(input_fn = train_input_fn,  steps=2000)

Here is how y_train looks

[450 450 450 ... 327 327 327]

type : numpy.ndarray

And here is how X_train looks

[[ 9.79285  11.659035  1.279528 ...  1.258979  1.063923 -2.45522 ]
 [ 8.711333 13.92955   1.117603 ...  3.588921  1.231256 -3.180302]
 [ 5.159803 14.059619  1.740708 ...  0.28172  -0.506701 -1.326669]
 ...
 [ 2.418473  0.542642 -3.658447 ...  4.631474  4.544892 -4.595605]
 [ 6.51176   4.321688 -1.483697 ...  3.13299   5.476103 -2.833903]
 [ 6.894113  5.986267 -1.178247 ...  2.305603  7.217919 -2.152574]]

type : numpy.ndarray

Error :

in pandas_input_fn(x, y, batch_size, num_epochs, shuffle, queue_capacity, num_threads, target_column)
     85           'Cannot use name %s for target column: DataFrame already has a '
     86           'column with that name: %s' % (target_column, x.columns))
---> 87     if not np.array_equal(x.index, y.index):
     88       raise ValueError('Index for x and y are mismatched.\nIndex for x: %s\n'
     89                        'Index for y: %s\n' % (x.index, y.index))

Update 1: Using numpy_input_fn

train_input_fn= tf.estimator.inputs.numpy_input_fn(
    x=X_train,
    y=y_train,
    batch_size=1000,
    shuffle = True
)

Error:

INFO:tensorflow:Calling model_fn.

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-23-3b7c6b879e38> in <module>()
     10 start_time = time.time()
     11 nn_classifier = tf.estimator.DNNClassifier(hidden_units=[1300,1300,1300], feature_columns=X_train, n_classes=200)
---> 12 nn_classifier.train(input_fn = train_input_fn,  steps=2000)
     13 total_time = start_time - time.time()

c:\users\appdata\local\programs\python\python36\lib\site-packages\tensorflow\python\estimator\estimator.py in train(self, input_fn, hooks, steps, max_steps, saving_listeners)
    353 
    354     saving_listeners = _check_listeners_type(saving_listeners)
--> 355     loss = self._train_model(input_fn, hooks, saving_listeners)
    356     logging.info('Loss for final step: %s.', loss)
    357     return self

c:\users\appdata\local\programs\python\python36\lib\site-packages\tensorflow\python\estimator\estimator.py in _train_model(self, input_fn, hooks, saving_listeners)
    822       worker_hooks.extend(input_hooks)
    823       estimator_spec = self._call_model_fn(
--> 824           features, labels, model_fn_lib.ModeKeys.TRAIN, self.config)
    825 
    826       if self._warm_start_settings:

c:\users\appdata\local\programs\python\python36\lib\site-packages\tensorflow\python\estimator\estimator.py in _call_model_fn(self, features, labels, mode, config)
    803 
    804     logging.info('Calling model_fn.')
--> 805     model_fn_results = self._model_fn(features=features, **kwargs)
    806     logging.info('Done calling model_fn.')
    807 

c:\users\appdata\local\programs\python\python36\lib\site-packages\tensorflow\python\estimator\canned\dnn.py in _model_fn(features, labels, mode, config)
    347           head=head,
    348           hidden_units=hidden_units,
--> 349           feature_columns=tuple(feature_columns or []),
    350           optimizer=optimizer,
    351           activation_fn=activation_fn,

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Any clue what I am doing wrong?


回答1:


The problem is with feature_columns argument on the estimator. Take a look at tf.estimator.DNNClassifier documentation:

feature_columns: An iterable containing all the feature columns used by the model. All items in the set should be instances of classes derived from _FeatureColumn.

There is also an example usage in the doc. Your X_train looks like a number of numeric columns, in this case you can simply create a list like this:

feature_columns = [tf.feature_column.numeric_column(i) for i in range(...)]



回答2:


I came across this error today and thought it would be great if I proved a solution. The problem is brought about by tf.estimator.inputs.numpy_input_fn. according to the TensorFlow docs, X must be a pandas.DataFrame instance and y must be a pandas.Series or a pandas.DataFrame instance. The type() function can help determine the data types of your X_train and y_train values. Changing X_train and y_train to the appropriate data type solves the problem.



来源:https://stackoverflow.com/questions/49649836/tensorflow-dnnclassifier-error-wile-training-numpy-ndarray-has-no-attribute-in

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!