DNNCLassifier Tensorflow

时间:2017-05-27 16:16:58

标签: python-2.7 numpy machine-learning tensorflow neural-network

我想在Tensorflow中将标签嵌入到DNNClassifier模型中。 与文档示例here不同,我收到以下错误消息:

label_keys_values = ["satan", "ipsweep", "nmap", "portsweep"]  
m = tf.contrib.learn.DNNClassifier(model_dir=model_dir,
                                  feature_columns=deep_columns,
                                  n_classes=4,
                                  hidden_units=[12, 4],
                                  label_keys=label_keys_values)
m.fit(input_fn=train_input_fn, steps=200)
  

文件“embedding_model_probe.py”,第118行,in       m.fit(input_fn = train_input_fn,steps = 200)     在new_func中输入文件“/usr/local/lib/python2.7/dist-packages/tensorflow/python/util/deprecation.py”,第281行       return func(* args,** kwargs)     文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py”,第430行,in fit       loss = self._train_model(input_fn = input_fn,hooks = hooks)     在_train_model中输入文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py”,第927行       model_fn_ops = self._get_train_ops(功能,标签)     _get_train_ops中的文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py”,第1132行       return self._call_model_fn(features,labels,model_fn_lib.ModeKeys.TRAIN)     在_call_model_fn中输入文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py”,第1103行       model_fn_results = self._model_fn(features,labels,** kwargs)     在_dnn_model_fn中输入文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/dnn.py”,第180行       logits = logits)     在create_model_fn_ops中输入文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/head.py”,第1004行       labels = self._transform_labels(mode = mode,labels = labels)     在_transform_labels中输入文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/head.py”,第1033行       “label_ids”:table.lookup(labels_tensor),     文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/lookup/lookup_ops.py”,第179行,在查找中       (self._key_dtype,keys.dtype))     TypeError:签名不匹配。键必须是dtype

< dtype:'string'>,得到< dtype:'int64'>

另一方面,如果我将label_key_values列设为numpy.array,我将收到以下错误:

label_keys_values = np.array(["satan", "ipsweep", "nmap", "portsweep"], dtype='string')
  

追踪(最近一次通话):     文件“embedding_model_probe.py”,第116行,in       label_keys = label_keys_values)     文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/dnn.py”,第337行, init       label_keys = label_keys),     在multi_class_head中输入文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/head.py”,第331行       label_keys = label_keys)     文件“/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/learn/python/learn/estimators/head.py”,第986行, init       if label_keys和len(label_keys)!= n_classes:   ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

1 个答案:

答案 0 :(得分:1)

我得到了解决方案。正如官方文件所说here

"如果用户在构造函数中指定label_keys,则标签必须是label_keys词汇表中的字符串。"

就我而言,我将标签列从训练和测试集转换为单热矢量(整数值),label_keys_values数组中的值与它们不匹配。