【发布时间】:2020-09-11 17:27:26
【问题描述】:
我正在尝试创建一个用于预测的 ANN 网络(即不只是分类为 0 或 1)。
我的代码如下:
import os
import pandas as pd
import numpy as np
from sklearn import preprocessing
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
data = pd.read_csv('ANNData.csv', skiprows=0, usecols=(1,2,3,4,5,6,7,8,9,11)) #importing data
data.interpolate(axis=0, method='linear', inplace=True) #interpolates = fills in missing values
data=data.values #converts to array
#scaling the data
min_max_scaler = preprocessing.MinMaxScaler()
scaled_data = min_max_scaler.fit_transform(data)
inputs=scaled_data[:,0:8]
output=scaled_data[:,8]
output = output.reshape(1095,1)
def sigmoid(x):
return 1/(1+(np.exp(-x)))
def sigmoid_der(x):
return (sigmoid(x)*(1-sigmoid(x)))
X_train, X_test, y_train, y_test = train_test_split(inputs, output, test_size=0.2)
synaptic_weights=2*np.random.random((8,1))-1
for iteration in range(10000):
input_layer= X_train
outputs = sigmoid(np.dot(input_layer, synaptic_weights))
error = outputs-y_train
adjustments = error*sigmoid_der(outputs)
synaptic_weights =np.dot(input_layer.T, adjustments)
print(outputs)
对于我的结果,我得到了所有的结果。客观地说,y_train 数据的前 5 个输出是
[0.69083156]
[0.07889126]
[0.3880597 ]
[0.3880597 ]
[0.23240938]
我应该提到,当我运行一次迭代的代码时,我得到了一个有意义的输出。当迭代次数为 2 次或更多时,我得到一个全部为 1 的数组。 即
[1.]
[1.]
[1.]
[1.]
有什么建议吗?还是添加更多层的唯一解决方案?
【问题讨论】:
-
sigmoid_der 是 sigmoid 的导数吗?如果是这样,您确定这是正确的吗? d sigmoid/ dx = np.exp(-x)/((1+np.exp(-x)**2)。也许可以像你写的那样写,但是我看不到。
-
是的,它是sigmoid的导数。我将其更改为您建议的值并得到相同的结果(适用于 1 次迭代,但所有 '1' 用于 2 次或更多次迭代。
标签: python machine-learning deep-learning neural-network prediction