神经网络全1

问题描述

我正在尝试创建一个用于预测的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)