Python DNNClassifier Tensorflow相关分类查询
我在csv中有输入和输出: 输出的形式为-1、0或1,可以从输出列中看到。 以下是我用于DNNClassifier的代码: 当n_类=3时,我得到的输出为: 当n_类=2时,我得到的输出为: 我的问题是: 1当n_classes=3时,我看到包含logit的列,但当n_classes=2时,我看到额外的列是logistic。为什么是这样?这个单独的专栏的目的是什么 2为什么分类器没有以3的形式对输出进行分类,因为输出列有3个不同的输出 3分类器是否预测输出的下一步或输出列中的相应结果 4哪个是我的输出列,以便我可以检查预测的输出?是物流还是物流Python DNNClassifier Tensorflow相关分类查询,python,python-3.x,tensorflow,classification,Python,Python 3.x,Tensorflow,Classification,我在csv中有输入和输出: 输出的形式为-1、0或1,可以从输出列中看到。 以下是我用于DNNClassifier的代码: 当n_类=3时,我得到的输出为: 当n_类=2时,我得到的输出为: 我的问题是: 1当n_classes=3时,我看到包含logit的列,但当n_classes=2时,我看到额外的列是logistic。为什么是这样?这个单独的专栏的目的是什么 2为什么分类器没有以3的形式对输出进行分类,因为输出列有3个不同的输出 3分类器是否预测输出的下一步或输出列中的相应结果 4哪个是我
好心的,请推荐我。我希望我的问题非常清楚。对于3类,最终输出层将概率分布视为一个多项式变量,而对于2类,它将是一个二进制变量 以ML表示的Logits是指在应用softmax函数时获得的非规范化日志概率。Logistic指的是将类似于sigmoid激活函数的东西应用于二元分类,以产生类似于概率的东西。如果使用指数对logit进行规范化和缩放,则在3个类的情况下,将获得概率列。对于两个类,您可以看到概率输出对应于逻辑输出,分别为1-p和p。在两个类的情况下,通常您只能有一个输出节点,因为结果是0/1类型。这就是为什么你会看到两种结果 输出总是根据每一类的概率。通过查看对应于最大概率的输出节点,您可以看到网络认为该输入属于哪个类。但通常,您会通过查看您的预期输出是否位于系统认为该特定数据点的顶部来衡量系统的运行情况。所以我们有可能看到这不是第一个猜测,也许是第二个猜测,如果是的话,有什么信心等等。
因此,您的输出可以从概率列中推断出来。“类别”列也相应地通过推断哪种可能性最大来说明同样的问题。这是一个很酷的答案。我猜我的激活功能不是softmax,而是relu。我仍然可以从你在答案中推断的要点中理解。谢谢你的解释
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import tensorflow as tf
from sklearn.model_selection import train_test_split
from tensorflow.contrib.tensorboard.plugins import projector
import csv
import os
print(os.listdir("input"))
data = pd.read_csv("training.csv")
data = data.fillna(0)
print((data.columns))
data[:-1] = data[:-1].apply(lambda x: (x - x.min()) / (x.max()-x.min()) )
feat_cols=[]
for i in range(len(data.columns)-1):
feat_cols.append(tf.feature_column.numeric_column(data.columns[i]))
data['output'] = data['output'].astype('int64')
data.info()
input_x = data.drop('output',axis=1)
input_y = data['output']
input_x.shape
X_train, X_test, y_train, y_test = train_test_split(input_x, input_y, test_size = 0.10, random_state = 0)
# write an input function
input_func = tf.estimator.inputs.pandas_input_fn(x=X_train, y=y_train, batch_size=10, num_epochs=1000, shuffle=True,target_column="output")
# Dense neural network means every neuron is connected to every neuron in the next stage
dnn_model = tf.estimator.DNNClassifier(hidden_units=[10,10], feature_columns=feat_cols, n_classes=3,model_dir="DNN1",
activation_fn=tf.nn.leaky_relu,optimizer=tf.train.AdamOptimizer(learning_rate=0.0001) )
# no need to create embedded columns, all columns are already embedded
# PULL THE LEVER, KRONK!
output = dnn_model.train(input_fn=input_func, steps=1000)
print("this is output====> ",output)
# Evaluate the model
eval_input_func = tf.estimator.inputs.pandas_input_fn(x=X_test, y=y_test, batch_size=10, num_epochs=1, shuffle=False,)
results = dnn_model.evaluate(eval_input_func)
print(results)
# Make some predictions
pred_input_func = tf.estimator.inputs.pandas_input_fn(x=X_train, batch_size=10, num_epochs=1, shuffle=False)
predictions = dnn_model.predict(pred_input_func)
my_pred=list(predictions)
for i in predictions:
print(i)
data1 = pd.DataFrame(my_pred)
data1.head()
data1.to_csv("pred_class.csv")