只用numpy的神经网络

怎么理解下面代码


X = np.random.randint(0, 5, size=(500, 500))  # X:数据集的样本特征,共有有效数据500条,每条数据500个特征
y = np.random.randint(0, 1, size=(1, 500))  # y:数据集的样本标签,500条有效数据,每条对应一个标签,共有500个标签
 
    
    
# 本函数为权重参数初始化函数
# 自行决定初始化参数的方式(例如:全零初始化,随机初始化等)
def initial_parameters(in_, out_): 
    """ 
    in_ : 输入层神经元个数 
    out_: 输出层神经元个数
    w: 权重参数weights
    b: 偏置参数bias
    设计思路:w,b的规模应当满足前向传播计算中矩阵乘法的计算要求
    """
    
    parameters = {  
        'w' = w,
        'b' = b
    }
    return parameters # 该函数返回初始化好的权重参数字典
 
 
# 本函数为前向传播输出预测值
# 本函数实现对字典的更新即可,无需返回值
def feed_forward(parameters, X):
    """
    parameters: 参数字典,即初始化的权重参数 
    X: 输入值
    y_pred: 预测值
    设计思路:利用参数字典中的w,b和输入值X,先进性线性变换,再进行激活,完成前向传播。将得到的y_pred添加保存至参数字典中。
    """
    
  
    
    
# 本函数为反向传播求梯度
# 通过链式法则求出梯度
def gradient(parameters, X, y):  
    """
    parameters: 参数字典 
    X: 输入数据
    y: 输入数据
    dw: 权重参数的梯度
    db: 偏置参数的梯度
    设计思路:通过链式法则,得到w,b对损失函数的偏导数,得出dw,db。
    """
    
    grad = {
        'dw' = dw,
        'db' = db
    }
    
    return grad  # 该函数返回通过反向传播求出的梯度字典
 
 
# 本函数为使用梯度下降法更新权重参数
# 所用梯度为经反向传播求得的梯度
def update(grad, parameters, lr):
    """
    grad: 通过反向传播求出的梯度,保存了当前的dw,db
    parameters: 参数字典,保存了当前的w,b
    lr: 学习率,影响梯度下降的速度
    """
    
    return parameters  # 该函数返回更新后的参数字典```

panda生成的数据是字典格式,参考https://blog.csdn.net/syw1027/article/details/107494333?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166486338516800182720189%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166486338516800182720189&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-107494333-null-null.142^v51^control,201^v3^add_ask&utm_term=pandas%E9%9A%8F%E5%8D%B3%E7%94%9F%E6%88%90%E6%95%B0%E5%AD%97%E7%9F%A9%E9%98%B5&spm=1018.2226.3001.4187

这个代码好像啥也没写

这个代码很好,把 前向神经网络的 反向传播算法(BP算法)的程序框架写的很清楚。

虽然每个子函数都还没有编写,但也做好了注释,包括输入输出的定义。

接下来把每个子程序编写好,就可以运行了。