用 Python 训练神经网络

本文通过Python介绍如何训练神经网络,包括反向传播算法的应用,数据预处理,以及添加偏置节点来提升网络的灵活性。文章提供了代码示例,演示了从训练数据的准备到网络训练的过程,并展示了在分类任务上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

老师讲解神经网络

在“运行神经网络”一章中,我们用 Python 代码编写了一个名为“神经网络”的类。此类的实例是具有三层的网络。当我们实例化此类的 ANN 时,层之间的权重矩阵是自动随机选择的。甚至可以在某些输入上运行这样的 ANN,但自然而然地,除了用于测试目的之外,它没有多大意义。这样的人工神经网络不能提供正确的分类结果。事实上,分类结果并没有适应预期的结果。权重矩阵的值必须根据分类任务进行设置。我们需要改进权重值,这意味着我们必须训练我们的网络。为了训练它,我们必须在train方法。如果您不了解反向传播并想了解它,我们建议您返回神经网络中的反向传播一章。

在了解并希望理解反向传播之后,您就可以完全理解该train方法了。

train使用输入向量和目标向量调用该方法。向量的形状可以是一维的,但它们会自动变成正确的二维形状,即reshape(input_vector.size, 1)reshape(target_vector.size, 1)。之后我们调用run方法来获取网络的结果output_vector_network = self.run(input_vector)。此输出可能与target_vector. 我们计算出output_error减去网络的输出output_vector_networktarget_vector

 scipy.special import expit as activation_function from scipy.stats import truncnorm导入numpy 作为 np
     
   

def  truncated_normal ( mean = 0 ,  sd = 1 ,  low = 0 ,  upp = 10 ): 
    return  truncnorm ( 
        ( low  -  mean )  /  sd ,  ( upp  -  mean )  /  sd ,  loc = mean ,  scale = sd )

 神经网络def  __init__ ( self ,  
                 no_of_in_nodes ,  
                 no_of_out_nodes ,  
                 no_of_hidden_​​nodes , 
                 learning_rate ): 
        self no_of_in_nodes  =  no_of_in_nodes 
        self no_of_out_nodes  =  no_of_out_nodes 
        self no_of_hidden_​​nodes  =  no_of_hidden_​​nodes 
        self learning_rate  =  learning_rate  
        self . create_weight_matrices ()
        
    def  create_weight_matrices ( self ): 
        """ 一种初​​始化神经网络权重矩阵的方法""" 
        rad  =  1  /  np . SQRT (自我no_of_in_nodes )
        X  =  truncated_normal (平均值= 0 , SD = 1 , 低= -弧度, UPP =弧度)
        自我weights_in_hidden  =  X 房车((自我no_of_hidden_​​nodes , 
                                       self no_of_in_nodes )) 
        rad  =  1  /  np SQRT (自我no_of_hidden_​​nodes )
        X  =  truncated_normal (平均值= 0 , SD = 1 , 低= -弧度, UPP =弧度)
        自我weights_hidden_​​out  =  X RVS ((自我no_of_out_nodes , 
                                        自我no_of_hidden_​​nodes ))
        
    
    def  train ( self ,  input_vector ,  target_vector ): 
        """ 
        input_vector 和 target_vector 可以是元组、列表或 ndarrays 
        """ 
        # 确保向量具有正确的形状
        input_vector  =  np . 数组(input_vector )
        input_vector  =  input_vector reshape ( input_vector . size ,  1 ) 
        target_vector  =  np 数组(target_vector )重塑(目标向量大小, 1 )

        output_vector_hidden  =  activation_function (自我weights_in_hidden  @  input_vector )
        output_vector_network  =  activation_function (自我weights_hidden_​​out  @  output_vector_hidden )
        
        output_error  =  target_vector  -  output_vector_network 
        tmp  =  output_error  *  output_vector_network  *  ( 1.0  -  output_vector_network )     
        self weights_hidden_​​out  +=  self learning_rate   *  ( tmp  @  output_vector_hidden . T )

        # 计算隐藏错误:
        hidden_​​errors  =  self . weights_hidden_​​out Ť  @  output_error 
        #更新的权重:
        TMP  =  hidden_​​errors  *  output_vector_hidden  *  (1.0  -  output_vector_hidden )
        自我weights_in_hidden  +=  self learning_rate  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值