python - 如何提高前馈神经网络的准确性?

标签 python numpy machine-learning neural-network

我在提高用 python 编码的前馈神经网络的准确性时遇到问题。我不确定这是一个真正的错误还是只是我的数学函数的无能,但我得到的输出不明确(例如 0.5),无论我增加多少迭代......我的代码:-

from numpy import exp, array, random, dot

class NeuralNetwork():

    def __init__(self):
        random.seed(1)
        self.synaptic_weights = 2 * random.random((3, 1)) - 1     # MM reuslt = 3 (3 * 1)

    def Sigmoid(self, x):
        return 1 / (1 + exp(-x))

    def Sigmoid_Derivative(self, x):
        return x * (1 - x)

    def train(self, Training_inputs, Training_outputs, iterations):
        output = self.think(Training_inputs)
        print ("THe outputs are: -", output)
        erorr = Training_outputs - output

        adjustment = dot(Training_inputs.T, erorr * self.Sigmoid_Derivative(output))
        print ("The adjustments are:-", adjustment)
        self.synaptic_weights += output

    def think(self, inputs):
        Training_inputs = array(inputs)
        return self.Sigmoid(dot(inputs, self.synaptic_weights))

# phew! the class ends..

if __name__ == "__main__":

    neural_network = NeuralNetwork()
    print("Random startin weights", neural_network.synaptic_weights)

    Training_inputs = array([[1, 1, 1], 
                             [0, 0, 0], 
                             [1, 0, 1],])                 # 3 rows * 3 columns???

    Training_outputs = array([[1, 1, 0]]).T

    neural_network.train(Training_inputs, Training_outputs, 0)

    print ("New synaptic weights after training: ")
    print (neural_network.synaptic_weights)

    # Test the neural network with a new situation.
    print ("Considering new situation [1, 0, 0] -> ?: ")
    print (neural_network.think(array([1, 0, 0])))

虽然这些是我的输出:=>

[Running] python -u "/home/neel/Documents/VS-Code_Projects/Machine_Lrn(PY)/test.py"
Random startin weights [[-0.16595599]
 [ 0.44064899]
 [-0.99977125]]
THe outputs are: - [[0.3262757 ]
 [0.5       ]
 [0.23762817]]
The adjustments are:- [[0.10504902]
 [0.14809799]
 [0.10504902]]
New synaptic weights after training: 
[[ 0.16031971]
 [ 0.94064899]
 [-0.76214308]]
Considering new situation [1, 0, 0] -> ?: 
[0.5399943]

[Done] exited with code=0 in 0.348 seconds

[Running] python -u "/home/neel/Documents/VS-Code_Projects/Machine_Lrn(PY)/tempCodeRunnerFile.py"
Random startin weights [[-0.16595599]
 [ 0.44064899]
 [-0.99977125]]
THe outputs are: - [[0.3262757 ]
 [0.5       ]
 [0.23762817]]
The adjustments are:- [[0.10504902]
 [0.14809799]
 [0.10504902]]
New synaptic weights after training: 
[[ 0.16031971]
 [ 0.94064899]
 [-0.76214308]]
Considering new situation [1, 0, 0] -> ?: 
[0.5399943]

[Done] exited with code=0 in 3.985 seconds

我尝试过更改迭代,但差异非常小。我认为问题可能出在我的数学(Sigmoid)函数之一上。除此之外,我认为第 20 行的点乘法可能是一个问题,因为这些调整对我来说看起来很不稳定......

此外,0.5 是否表明我的网络没有学习,因为它只是进行随机猜测?

PS:-我认为我的问题不是重复的,因为它涉及所述模型的“准确性”,而链接的问题涉及“不需要的输出”

最佳答案

您的Sigmoid_Derivative函数是错误,这已经在previous question of yours中指出了。 ;应该是:

def Sigmoid_Derivative(self, x):
    return self.Sigmoid(x) * (1-self.Sigmoid(x))

请参阅Derivative of sigmoid function Math.SE 的线程以及讨论 here .

如果更正此问题仍然没有给出预期结果,请不要更改上面的问题 - 相反,打开一个新问题...

关于python - 如何提高前馈神经网络的准确性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58102038/

相关文章:

python - 将稀疏矩阵快速插入另一个矩阵

python - SQL 查询计算来自 SQL Server 中同一表的不同行的计算

python - 将高度嵌套的 MAT 文件加载到 Python 中

python - 求封闭二维均匀三次 B 样条的面积

python - 将numpy矩阵转换为嵌套字典的有效方法

python - 手动计算 AUC,无需使用任何 Numpy 或 Sklearn 库

javascript - Python 中是否有类似于 Harmony 的 let 关键字的东西?

python - 如何使 pydantic 类字段不可变?

python - 当使用 OpenCV 完成图像加载和调整大小时,Resnet50 会产生不同的预测

python - 向 Pandas 添加趋势线