问题描述
我正在尝试创建一个用于预测的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.]
解决方法
假设您使用的是梯度下降法,我认为您错过了学习率。
尝试设置
lr = 1-e3 # try different range from 1-e2 to 1-e5
adjustments = lr * error * sigmoid_der(outputs)