Python 神经网络输出所有1s

Python 神经网络输出所有1s,python,machine-learning,deep-learning,neural-network,prediction,Python,Machine Learning,Deep Learning,Neural Network,Prediction,我正在尝试创建一个用于预测的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('ANNDat

我正在尝试创建一个用于预测的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_列车数据的前5个输出为

[0.69083156]
 [0.07889126]
 [0.3880597 ]
 [0.3880597 ]
 [0.23240938]
我应该提到,当我为一次迭代运行代码时,我会得到一个有意义的输出。当迭代次数为2次或更多次时,我得到一个包含所有迭代次数的数组。 i、 e


有什么建议吗?或者是添加更多层的唯一解决方案?

假设您使用的是梯度下降,我认为您缺少学习速度

尝试设置

lr=1-e3#尝试从1-e2到1-e5的不同范围
调整=lr*误差*西格莫德(输出)

假设您使用的是梯度下降,我认为您缺少学习速度

尝试设置

lr=1-e3#尝试从1-e2到1-e5的不同范围
调整=lr*误差*西格莫德(输出)

乙状结肠是乙状结肠的衍生物吗?如果是,您确定这是正确的吗?d sigmoid/dx=np.exp(-x)/(1+np.exp(-x)**2)。也许它可以像你那样写,但我看不见。是的,它是sigmoid的导数。我将它更改为你建议的值,得到了相同的结果(适用于1次迭代,但所有“1”适用于2次或更多次迭代。sigmoid是sigmoid的导数吗?如果是,你确定这是正确的吗?d sigmoid/dx=np.exp(-x)/((1+np.exp(-x)**2)。也许它可以像你那样写,但我看不到。是的,它是sigmoid的导数。我将它更改为你建议的值,得到了相同的结果(适用于1次迭代,但所有“1”适用于2次或更多次迭代。添加此项后,我得到2次迭代的所有“1”,然后得到所有“0”。@Laura你的损失函数正确吗?我刚刚意识到这不是逻辑回归的损失函数。添加此项后,我得到2次迭代的所有“1”,然后得到所有“0”。@Laura是你的损失函数是吗?我刚刚意识到这不是逻辑回归的损失函数
 [1.]
 [1.]
 [1.]
 [1.]