【问题标题】:How to Input my Training Data into this Neural Network如何将我的训练数据输入到这个神经网络中
【发布时间】:2019-05-21 23:19:44
【问题描述】:

我正在尝试使用一段特定的代码来解决分类问题,但我无法准确理解我的数据是如何输入到神经网络中的。

我开始使用 1-of-C 虚拟编码对数据进行编码,这样我就可以在数据中保留分类上下文。我还没有完全完成对数据的编码,因为我不完全了解如何利用手头的代码进行输入。

这是迄今为止我的编码数据示例:

'In Raw format, for predicting Political Party Affiliation
   'Age Sex     Income    Area      Party
[0] 30  male    38000.00  urban     democrat
[1] 36  female  42000.00  suburban  republican
[2] 52  male    40000.00  rural     independent
[3] 42  female  44000.00  suburban  other

'Encoded Format
[0] -1.23  -1.0  -1.34  ( 0.0   1.0)  (0.0  0.0  0.0  1.0)
[1] -0.49   1.0   0.45  ( 1.0   0.0)  (0.0  0.0  1.0  0.0)
[2]  1.48  -1.0  -0.45  (-1.0  -1.0)  (0.0  1.0  0.0  0.0)
[3]  0.25   1.0   1.34  ( 1.0   0.0)  (1.0  0.0  0.0  0.0)

我对数值数据使用高斯归一化,对字符串数据使用 1-of-C 虚拟编码和 1-of-(C-1) 编码。最后一列数据是类别。

考虑下面的代码;输入变量 X 接受以下格式的数据:

X=np.array([[1,0,1,0],[1,0,1,1],[0,1,0,1]])

在遍历所有数据之前,我是否会这样输入数据?

X=np.array([[-1.23,-1,-1.34,0010],[00000010,-.49,1,.45],[1000,00001000,1.48,-1]])

我已阅读以下 SO 问题:How is input dataset fed into neural network?,这有助于澄清该过程。如何逐行提供特征,目标特征/标签(在这种情况下为政党)作为每行的最后一个特征。这对我来说很有意义。在发布的代码中,我假设变量 Y 是目标。

考虑到这一点,我的输入应该是这样的:

X=np.array([[-1.23,-1,-1.34,0010],[00000010,0,0,0],[0,0,0,0]])

我只捕获第一行,目标特征作为最后一个输入?

我不确定应该是哪一个。提前感谢您的帮助。

import numpy as np

#Input array
 X=np.array([[1,0,1,0],[1,0,1,1],[0,1,0,1]])

#Output
 y=np.array([[1],[1],[0]])

#Sigmoid Function
 def sigmoid (x):
 return 1/(1 + np.exp(-x))

#Derivative of Sigmoid Function
 def derivatives_sigmoid(x):
 return x * (1 - x)

#Variable initialization
 epoch=5000 #Setting training iterations
 lr=0.1 #Setting learning rate
 inputlayer_neurons = X.shape[1] #number of features in data set
 hiddenlayer_neurons = 3 #number of hidden layers neurons
 output_neurons = 1 #number of neurons at output layer

#weight and bias initialization
 wh=np.random.uniform(size=(inputlayer_neurons,hiddenlayer_neurons))
 bh=np.random.uniform(size=(1,hiddenlayer_neurons))
 wout=np.random.uniform(size=(hiddenlayer_neurons,output_neurons))
 bout=np.random.uniform(size=(1,output_neurons))

for i in range(epoch):

#Forward Propogation
 hidden_layer_input1=np.dot(X,wh)
 hidden_layer_input=hidden_layer_input1 + bh
 hiddenlayer_activations = sigmoid(hidden_layer_input)
 output_layer_input1=np.dot(hiddenlayer_activations,wout)
 output_layer_input= output_layer_input1+ bout
 output = sigmoid(output_layer_input)

#Backpropagation
 E = y-output
 slope_output_layer = derivatives_sigmoid(output)
 slope_hidden_layer = derivatives_sigmoid(hiddenlayer_activations)
 d_output = E * slope_output_layer
 Error_at_hidden_layer = d_output.dot(wout.T)
 d_hiddenlayer = Error_at_hidden_layer * slope_hidden_layer
 wout += hiddenlayer_activations.T.dot(d_output) *lr
 bout += np.sum(d_output, axis=0,keepdims=True) *lr
 wh += X.T.dot(d_hiddenlayer) *lr
 bh += np.sum(d_hiddenlayer, axis=0,keepdims=True) *lr

print output

【问题讨论】:

    标签: python numpy machine-learning neural-network backpropagation


    【解决方案1】:

    好问题。

    首先使用来自SciKit Learn 的预构建神经网络实现

    接下来,将数据拆分为特征和标签(首先将输入向量展平)

    X_features=X[:,:-1]
    X_labels=X[:,-1]
    

    然后设置 SciKit MLP

    model=MLPClassifier(args...)
    

    适合您的数据

    model.fit(X_features,X_labels)
    

    瞧……

    现在你可以预测一个新的输入

    Y=model.predict(input_vector)
    

    注意:以真正的数据科学的名义,请记住将您的数据拆分为训练和验证集(例如 90/10)

    【讨论】:

    • 感谢您对使用 SciKit 的建议。由于与有限的开发环境相关的原因(淡化了 Python 库),我想尝试并利用我上面发布的代码。如果您认为代码不足以完成我想要完成的工作,那么也许我可以尝试联系 IT 部门。访问此类库。不过,我试图避免这种情况。
    • 他们可能还不够。我没有详细研究你的实现,我只是想偷工减料。
    • 该方法仍然适用。展平输入向量。分离特征和标签,然后迭代训练
    猜你喜欢
    • 2014-11-21
    • 2014-05-15
    • 1970-01-01
    • 2019-01-30
    • 2011-04-07
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多