首页 > 编程语言 >Python两层神经网络

Python两层神经网络

时间:2022-10-04 14:12:03浏览次数:72  
标签:Python cache 两层 shape ## 神经网络 dx np probs

参考

神经网络15分钟入门——使用python从零开始写一个两层神经网络_Mr.看海的博客-CSDN博客_神经网络入门python

 

# 参考 https://blog.csdn.net/fengzhuqiaoqiu/article/details/102810048
import numpy as np

## 正向传播函数
#  H = x*w +  b
def affine_formard(x,w,b):
    out = None
    N = x.shape[0]
    x_row = x.reshape(N,-1)
    out = np.dot(x_row, w) + b
    cache = (x, w, b)
    return out, cache

## 反向传播函数
def affine_backward(dout,cache):
    x, w, b = cache
    dx, dw, db = None, None, None
    dx = np.dot(dout, w.T)
    dx = np.reshape(dx,x.shape)
    x_row = x.reshape(x.shape[0],-1)
    dw = np.dot(x_row.T, dout)
    db = np.sum(dout, axis=0, keepdims=True)
    return dx, dw, db

X = np.array([[2,1],[-1,1],[-1,-1],[1,-1]])
t = np.array([0,1,2,3])
np.random.seed(1)

input_dim = X.shape[1]       ## 输入参数的维度
num_classes = t.shape[0]     ## 输出参数的维度
hidden_dim = 50              ## 隐藏层维度
reg = 0.001                  ## 正则化强度
epsilon = 0.001              ## 梯度下降的学习率
W1 = np.random.randn(input_dim, hidden_dim)
W2 = np.random.randn(hidden_dim, num_classes)
b1 = np.zeros((1, hidden_dim))
b2 = np.zeros((1, num_classes))

for j in range(10000):
    H, fc_cache = affine_formard(X,W1,b1)
    H = np.maximum(0, H)
    relu_cache = H 
    Y, cachey = affine_formard(H, W2, b2)
    ##  Softmax 层计算
    probs = np.exp(Y - np.max(Y, axis=1, keepdims=True))
    probs /= np.sum(probs, axis=1, keepdims=True)
    ## 计算 loss
    N = Y.shape[0]
    # print(probs[np.arange(N),t])
    loss = -np.sum(np.log(probs[np.arange(N), t]))/N
    print('loss:',  loss)
    dx = probs.copy()
    dx[np.arange(N), t] -= 1
    dx /= N 
    dh1, dW2, db2 = affine_backward(dx, cachey)
    dh1[relu_cache <=0 ] = 0 
    dX, dW1, db1 = affine_backward(dh1, fc_cache)

    dW2 += reg * W2
    dW1 += reg * W1 
    W2 += -epsilon * dW2
    b2 += -epsilon * db2
    W1 += -epsilon * dW1
    b1 += -epsilon * db1


test = np.array([[2,2],[-2,2],[-2,-2],[2,-2]])
H, fc_cache =  affine_formard(test, W1, b1)
H = np.maximum(0,H)
relu_cache = H 
Y, cachey = affine_formard(H, W2, b2)
## softmax
probs = np.exp(Y - np.max(Y, axis=1, keepdims=True))
probs /= np.sum(probs, axis=1, keepdims=True)
print(probs)
for k in range(4):
    print(test[k,:],'所在的象限为', np.argmax(probs[k,:])+1)
View Code

 

标签:Python,cache,两层,shape,##,神经网络,dx,np,probs
From: https://www.cnblogs.com/ghzhan/p/16753690.html

相关文章

  • python合并多个excel
    前言1.工作中,经常需要合并多个Excel文件。如果文件数量比较多,则工作量大,易出错,此时,可以使用Python来快速的完成合并。2.使用方法:将需要合并的多个Excel文件放到同一个文......
  • Python第五章实验报告
    一.实验项目名称:《零基础学Python》第五章实战、实例以及两道作业题二.实验目的和要求:了解和掌握操作字符串的方法和正则表达式的应用三.实验环境:IDLE(Python3.964-bit)......
  • python生成二维码
    前言二维码在我们的生活中可以说是必不可少的,不单单是手机支付、其它很多地方也都需要扫描二维码。那么下面我们就来看看如何使用python来生成二维码、以及识别二维码。......
  • Python中优雅的字典技巧总结
    1.引言在日常工作中,大家都需要进行字典的相关操作,对于某些初学者,经常会写一堆繁琐的代码来实现某项简单的功能。本篇文章重点介绍一些在Python中关于字典的一些简单技巧,熟......
  • skywalking 实现收集基于python的Django项目链路追踪案例
    一、python3环境设置1.1、安装python3apt-getupdateaptinstallpython3-pip-ypipinstall"apache-skywalking"[root@skywalking-agent-07~]#pipinstall"apache-s......
  • 0555-6.1.0-使用Python并发访问认证和非认证集群
    作者:李继武1文档编写目的Fayson在前面的文章《​​0553-6.1.0-如何使用Java代码同时访问安全和非安全CDH集群​​》和《​​0554-6.1.0-同一java进程中同时访问认证和非认证......
  • python在VScode中中文输出乱码的解决方案
    ————————————————版权声明:本文为CSDN博主「Rhett.Yao」的原创文章。原文链接:https://blog.csdn.net/m0_63109538/article/details/126419637——————......
  • python系列教程196——参数匹配
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于......
  • 【Web开发】Python实现Web服务器(Bottle框架)
    Django-TheWebframeworkforperfectionistswithdeadlines.Flask-ThePythonmicroframeworkforbuildingwebapplications.Tornado-TornadoisaPythonw......
  • Python代码调试方法
    对于每个程序开发者来说,调试几乎是必备技能。常用Pycharm编辑器里的方法有Print大法、log大法,但缺少类似Matlab的变量区,给代码调试带来不便,特别是在有函数的情况下,变量无法......