吴恩达机器学习课后作业-04神经网络

news2024/11/13 20:48:14

神经网络

  • 对y进行独立热编码处理(one-hot处理)
  • 序列化权重参数
  • 前向传播
  • 代价函数
  • 反向传播
  • 神经网络优化
  • 可视化隐藏层

在这里插入图片描述

对y进行独立热编码处理(one-hot处理)

在这里插入图片描述

def one_hot_encoder(raw_y):
    result=[]
    for i in raw_y:#1-10
        y_temp=np.zeros(10)#1100向量
        y_temp[i-1]=1
        result.append(y_temp)#一行一行写入,每一行都仅有一个1,循环写入5000return np.array(result)
   结果
   [[0. 0. 0. ... 0. 0. 1.]
 [0. 0. 0. ... 0. 0. 1.]
 [0. 0. 0. ... 0. 0. 1.]
 ...
 [0. 0. 0. ... 0. 1. 0.]
 [0. 0. 0. ... 0. 1. 0.]
 [0. 0. 0. ... 0. 1. 0.]]

序列化权重参数

"""
序列化权重参数函数
"""
def seriallize(a,b):
    return np.append(a.flatten(),b.flatten())
"""
解序列化
"""
def deserialize(theta_serialize):
    theta1=theta_serialize[:25*401].reshape(25,401)
    theta2=theta_serialize[25*401].reshape(10,26)
    return theta1,theta2


theta_serialize=seriallize(theta1,theta2)#序列化
theta1,theta2=deserialize(theta_serialize)#解序列化

前向传播

"""
前向传播函数
"""
def sigmoid(z):
    return 1/(1+np.exp(-z))
def feed_forward(theta_serialize,x):
    theta1,theta2=deserialize(theta_serialize)
    a1 = x
    z2 = x @ theta1.T
    a2 = sigmoid(z2)
    a2 = np.insert(a2, 0, 1, axis=1)
    z3 = a2 @ theta2.T
    h = sigmoid(z3)
    return a1,z2,a2,z3,h

代价函数

在这里插入图片描述

在这里插入图片描述

"""
代价函数(不带正则化)

"""
def cost(theta_serialize,x,y):
    a1, z2, a2, z3, h=feed_forward(theta_serialize,x)
    J=-np.sum(y*np.log(h)+(1-y)*np.log(1-h))/len(x)
    return J
"""
代价函数(正则化)
"""
def reg_cost(theta_serialize,x,y,lamda):

    sum1=np.sum(np.power(theta1[:,1:],2))
    sum2 = np.sum(np.power(theta2[:, 1:], 2))
    reg=(sum1+sum2)*lamda /(2*len(x))
    return reg+cost(theta_serialize,x,y)

反向传播

在这里插入图片描述


"""
反向传播
无正则化

"""
def sigmoid_gradient(z):
    return sigmoid(z)*(1-sigmoid(z))

def gridient(theta_serialize,x,y):
    theta1,theta2=deserialize(theta_serialize)
    a1, z2, a2, z3, h=feed_forward(theta_serialize,x)
    d3=h-y
    d2=d3@theta2[:,1:]*sigmoid_gradient(z2)
    D2=(d3.T@a2)/len(x)
    D1=(d2.T@a1)/len(x)
    return seriallize(D1,D2)
"""
反向传播
带正正则化

"""
def reg_gradient(theta_serialize,x,y,lamda):
    D=gridient(theta_serialize,x,y)
    D1,D2=deserialize(D)
    theta1, theta2 = deserialize(theta_serialize)
    D1[:,1:]=D1[:,1:]+theta1[:,1:]*lamda/len(x)
    return seriallize(D1,D2)

神经网络优化


"""
神经网络优化
"""

def nn_training(x,y):
    init_theta = np.random.uniform(-0.5,0.5,10285)
    res = minimize(
        fun =reg_cost,
        x0=init_theta,
        args= (x,y,lamda),
        method='TNC',
        jac = reg_gradient,
        options = {'maxiter':300})
    return res


lamda=10

# print(cost(theta_serialize,x,y))
# print(reg_cost(theta_serialize,x,y,lamda))
#
res = nn_training(x,y)
raw_y = data['y'].reshape(5000,)
_,_,_,_,h = feed_forward(res.x,x)
y_pred = np.argmax(h,axis=1)+1
acc = np.mean(y_pred == raw_y)
print(acc)

可视化隐藏层

"""
可视化隐藏层
"""
def plot_hidden_layer(theta):
    theta1,_=deserialize(theta)
    hidden_layer=theta1[:,1:]
    fig, ax = plt.subplots(figsize=(8, 8), nrows=5, ncols=5, sharey=True, sharex=True)
    plt.xticks([])
    plt.yticks([])
    for r in range(5):
        for c in range(5):
            ax[r, c].imshow(hidden_layer[5 * r + c].reshape(20, 20).T, cmap="gray_r")
    plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络编程之初识

目录 ​前言 发展史 网络互连 局域网(LAN) 广域网(WAN) 网络通信基础 IP地址 特殊IP地址 端口号 网络协议 协议的作用 五元组 协议分层 含义 OSI七层模型 TCP/IP五层协议 网络设备所在分层 封装和分用 发送方 接收方 前言 在这个科技发达的时代&#xff0…

初识C语言指针(3)

目录 1. 数组名的理解 2. 使⽤指针访问数组 3. ⼀维数组传参的本质 4. 冒泡排序 5. 二级指针 6. 指针数组 7. 指针数组模拟⼆维数组 结语 1. 数组名的理解 对于数组名想必大家并不陌生,数组名就是该数组首元素的地址,设想有一个arr 数组。我们…

文本是否换行显示

多行文本 1、white-space: pre-wrap; 保留连续的空白符。在遇到换行符或 <br> 元素时&#xff0c;或者根据填充行框盒子的需要换行。 2、word-break: break-word; 如果单词太长而无法在当前行容纳&#xff0c;浏览器可以尝试在单词内部进行断行&#xff0c;以避免内容…

轻松获得ADSL代理服务

ADSL 代理服务接入常见问答 在当今激烈的网络爬虫与反爬虫斗争中&#xff0c;各大网站和应用程序采取的风险管理手段愈加严格&#xff0c;其中最常见的一种措施是 IP 封禁。 为了有效应对 IP 封禁带来的挑战&#xff0c;设置代理服务成为一种非常有效的解决方案。配置完代理后…

数论之高斯消元

高斯消元&#xff1a; 前置知识&#xff1a; 高斯消元五步骤法 枚举每一列c 找到绝对值最大的一行 将该行换到最上面&#xff08;第r行&#xff09; 将该行的第c列数字变为1 把该行下面的第c列数字全部变为0 代回求解 #include <bits/stdc.h>using namespace std;…

Linux LVM 详解

Linux LVM 详解 1. 简介 参考链接&#xff1a; https://blog.csdn.net/qq_35745940/article/details/119054949 https://blog.csdn.net/FP202530/article/details/125140176 &#x1f449; LVM&#xff08;Logical Volume Manager&#xff09;逻辑卷管理 是在硬盘分区和文件系…

面向对象02:构造器详解

本节内容视频链接&#xff1a;面向对象05&#xff1a;构造器详解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p64&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 构造器&#xff08;‌Constructor&#xff09;‌是一种特殊的方法&#xff0c;‌用于初始…

解决Intel-12代13代14代大小核调用导致VMware虚拟机性能低

0x01 设备信息 近期入手的是一台2023款 y9000p 游戏本&#xff0c;CPU为13500h 显卡为RTX4060。 0x02 VMware虚拟机遇到的性能问题 尤其是windows虚机明显感觉性能非常差&#xff0c;开几个网页都很卡。 我一度怀疑是CPU i5性能差&#xff0c;还没我的轻薄本运行速度快&…

jmeter中CSV 数据文件设置用例

1、CSV数据文件的基础使用 线程组->添加->配置远近->CSV数据文件设置 2、多条用例运行CSV数据文件 由于我的csv请求的json数据有“&#xff0c;”所以我这边 分隔符选择了*号 写了两行需要测试的用例&#xff0c;需要添加一个“循环控制器” 线程组->添加-&g…

省时又省力!2024年最新录屏软件快捷键大放送

录屏工具可以帮我们录制教学视频、游戏精彩瞬间等内容。很多时候录制的过程瞬息万变&#xff0c;如果合理使用录屏快捷键就会极大的缓解我们录制时候的慌乱。今天&#xff0c;就让我们一起探索那些“大家都在用的录屏软件快捷键”&#xff0c;看看它们是如何让我们的录制工作变…

centos7 xtrabackup mysql(8)压缩 全量备份 还原(4)

centos7 xtrabackup mysql&#xff08;8&#xff09;压缩 全量备份 还原&#xff08;4&#xff09; 查看版本&#xff1a; xtrabackup --version qpress --help 主机端 mysql -u root -p 1234aA~1 use company_pro; insert into employee(name) value (‘20240823_1401’);…

2024.8.23

130124202408231008 DATE #:20240823 ITEM #:DOC WEEK #:FRIDAY DAIL #:捌月二十 TAGS < BGM "Forest Mixtape&#xff08;Tsuki)" > < theme oi-graph theory Eulerian > < [NULL] > < [空] > < [空] >冰岛的温柔是克莱因蓝再加点…

使用nfs搭建文件共享系统,以及windows环境如何访问linux系统中的文件共享目录

31、简介 在一些场景中&#xff0c;我们需要多台机器进行磁盘文件共享&#xff0c;集群中如果有linux机器&#xff0c;也有windows机器&#xff0c;如何设置进行文件共享&#xff0c;本文将详细说明。 注&#xff1a;本文linux系统使用的是 centos7&#xff0c;windows使用的是…

【Qt】常见控件 —— QWidget

文章目录 QWidget 的基本介绍QWidget 的 enable 属性QWidget 的 geometry属性 QWidget 的基本介绍 Qt 中 的 各种控件 都继承自 QWidget类 在 Qt designer 右侧 就显示出 QWidget的各种属性 并且也可以直接进行编辑 QWidget 的 enable 属性 enable 描述一个控件是否处于可用 …

前端面试题整理-webpack

实现前端模块化&#xff0c;将多个 js&#xff0c;打包成一个 bundle.js (其他类型文件交由各自的 loader 处理) 1. webpack 了解吗&#xff1f;大概介绍一下 一种打包工具&#xff0c;实现前端模块化&#xff0c;将多个 js&#xff0c;打包成一个 bundle.js (其他类型文件交…

Linux中查看端口被哪个进程占用、进程调用的配置文件、目录,address already in use端口被占用杀死并释放端口

1.查看被占用的端口的进程&#xff08;netstat和ss是一样的&#xff0c;较新的系统推荐ss&#xff09;: netstat -antulp | grep 端口号ss -antulp | grep :端口号lsof -i | grep 端口号2. 通过上面的命令就可以列出&#xff0c;这个端口被哪些应用程序所占用&#xff0c;然后找…

Java设计模式之策略模式详细讲解和案例示范

Java设计模式之策略模式详细讲解和案例示范 在软件开发中&#xff0c;策略模式是一种常见且非常有用的设计模式。它允许定义一系列算法&#xff0c;将它们一个个封装起来&#xff0c;并且使它们可以互相替换。策略模式让算法可以独立于使用它们的客户端而变化。本篇文章将详细…

VScode的python虚拟环境

1 创建虚拟环境&#xff08;venv&#xff09; 在VSCode中打开项目文件夹&#xff0c;键盘按住快捷键ctrl shift p&#xff0c;打开命令面板&#xff0c;输入python:创建环境 选择venv&#xff0c;输入解释器路径&#xff0c;此时左侧文件夹内会出现一个.venv文件夹 2 激活虚拟…

未来已来:探索机器学习如何重塑人工智能的未来方向

引言&#xff1a;机器学习室实现人工智能的关键技术手段&#xff0c;应用领域持续延伸 机器学习是人工智能的一个重要分支&#xff0c;主要研究如何让计算机系统通过数据学习并做出决策或预测&#xff0c;而不需要明确的编程。简单来说&#xff0c;就是让计算机利用经验来提高性…

C# 如何实现接口事件:详解与示例

文章目录 实现接口事件的步骤示例&#xff1a;实现接口事件1. 定义接口事件2. 实现接口事件3. 订阅和触发事件4. 使用示例 总结 在C#中&#xff0c;接口&#xff08;interface&#xff09;是一种定义类必须实现的方法和属性的抽象类型。除了方法和属性&#xff0c;接口还可以包…