吴恩达机器学习-可选实验室:简单神经网络(Simple Neural Network)

在这个实验室里,我们将使用Numpy构建一个小型神经网络。它将与您在Tensorflow中实现的“咖啡烘焙”网络相同。在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
plt.style.use('./deeplearning.mplstyle')
import tensorflow as tf
from lab_utils_common import dlc, sigmoid
from lab_coffee_utils import load_coffee_data, plt_roast, plt_prob, plt_layer, plt_network, plt_output_unit
import logging
logging.getLogger("tensorflow").setLevel(logging.ERROR)
tf.autograph.set_verbosity(0)

数据集
这是与前一个实验室相同的数据集。

X,Y = load_coffee_data();
print(X.shape, Y.shape)

在这里插入图片描述
让我们在下面绘制咖啡烘焙数据。这两个功能是以摄氏度为单位的温度和以分钟为单位的持续时间。在家烤咖啡建议时间最好保持在12到15分钟之间,而温度应该在175到260摄氏度之间。当然,随着温度的升高,持续时间应该会缩短。

plt_roast(X,Y)

在这里插入图片描述
标准化数据
为了与之前的实验室相匹配,我们将对数据进行规范化。请参考该实验室了解更多详细信息

print(f"Temperature Max, Min pre normalization: {np.max(X[:,0]):0.2f}, {np.min(X[:,0]):0.2f}")
print(f"Duration    Max, Min pre normalization: {np.max(X[:,1]):0.2f}, {np.min(X[:,1]):0.2f}")
norm_l = tf.keras.layers.Normalization(axis=-1)
norm_l.adapt(X)  # learns mean, variance
Xn = norm_l(X)
print(f"Temperature Max, Min post normalization: {np.max(Xn[:,0]):0.2f}, {np.min(Xn[:,0]):0.2f}")
print(f"Duration    Max, Min post normalization: {np.max(Xn[:,1]):0.2f}, {np.min(Xn[:,1]):0.2f}")

在这里插入图片描述
上面的这部分跟上一篇文章一样
Numpy模型(Numpy中的正向道具)
在这里插入图片描述

让我们构建讲座中描述的“咖啡烘焙网络”。有两层Sigmoid激活。

如讲座中所述,可以使用NumPy构建自己的密集层。然后可以利用这一点来构建多层神经网络。
在这里插入图片描述
在第一个可选实验室中,您在NumPy和Tensorflow中构建了一个神经元,并注意到它们的相似性。一个层只包含多个神经元/单元。如讲座中所述,可以使用for循环访问层中的每个单元(j),并对该单元(W[:,j])执行权重的点积,并对单元(b[j])的偏差求和以形成z。然后可以将激活函数g(z)应用于该结果。让我们在下面尝试构建一个“密集层”子程序。
👇my_dense函数计算每一层的输出值

def my_dense(a_in, W, b, g):"""Computes dense layerArgs:a_in (ndarray (n, )) : Data, 1 example W    (ndarray (n,j)) : Weight matrix, n features per unit, j unitsb    (ndarray (j, )) : bias vector, j units  g    activation function (e.g. sigmoid, relu..)Returnsa_out (ndarray (j,))  : j units|"""units = W.shape[1]a_out = np.zeros(units)for j in range(units):               w = W[:,j]                                    z = np.dot(w, a_in) + b[j]         a_out[j] = g(z)               return(a_out)

👇下面的单元利用上面的my_dense子程序构建了一个两层神经网络。返回神经网络最终输出值。

def my_sequential(x, W1, b1, W2, b2):a1 = my_dense(x,  W1, b1, sigmoid)a2 = my_dense(a1, W2, b2, sigmoid)return(a2)

我们可以在Tensorflow中复制以前实验室中训练过的权重和偏差。

W1_tmp = np.array( [[-8.93,  0.29, 12.9 ], [-0.1,  -7.32, 10.81]] )
b1_tmp = np.array( [-9.82, -9.28,  0.96] )
W2_tmp = np.array( [[-31.18], [-27.59], [-32.56]] )
b2_tmp = np.array( [15.41] )

预测
在这里插入图片描述
一旦你有了一个经过训练的模型,你就可以用它来进行预测。回想一下,我们模型的输出是一个概率。在这种情况下,烤得好的概率。要做出决定,必须将概率应用于阈值。在这种情况下,我们将使用0.5。

让我们从编写一个类似于Tensorflow的model.product()的例程开始。这需要一个矩阵𝑋与所有𝑚行中的示例,并通过运行模型进行预测。
my_sequential()是对一个输入进行预测,👇my_predict()是对所有的X进行预测

def my_predict(X, W1, b1, W2, b2):m = X.shape[0]p = np.zeros((m,1))for i in range(m):p[i,0] = my_sequential(X[i], W1, b1, W2, b2)return(p)

我们可以在两个例子中尝试这个例程:
👇调用函数

X_tst = np.array([[200,13.9],  # postive example[200,17]])   # negative example
X_tstn = norm_l(X_tst)  # remember to normalize
predictions = my_predict(X_tstn, W1_tmp, b1_tmp, W2_tmp, b2_tmp)

为了将概率转换为决策,我们应用了一个阈值:

yhat = np.zeros_like(predictions)
for i in range(len(predictions)):if predictions[i] >= 0.5:yhat[i] = 1else:yhat[i] = 0
print(f"decisions = \n{yhat}")

在这里插入图片描述
这可以更简洁地完成:

yhat = (predictions >= 0.5).astype(int)
print(f"decisions = \n{yhat}")

在这里插入图片描述
网络功能
此图显示了整个网络的操作,与之前实验室的Tensorflow结果相同。左图是由蓝色阴影表示的最终层的原始输出。这覆盖在由X和O表示的训练数据上。
右图是在决策阈值之后网络的输出。这里的X和O对应于网络做出的决策。

netf= lambda x : my_predict(norm_l(x),W1_tmp, b1_tmp, W2_tmp, b2_tmp)
plt_network(X,Y,netf)

在这里插入图片描述
祝贺
您已经在NumPy中构建了一个小型神经网络。希望这个实验室揭示了构成神经网络一层的相当简单和熟悉的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软聘请了谷歌DeepMind的联合创始人

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

如何让intellij idea支持一个目录多个springtboot或maven项目

一、背景 有的时候,我们希望intellij idea 能像 eclipse 一样有workspace的概念,能在一个workspace目录里面引入多个项目,如: 我们有项目a、项目b,现在的项目几乎都是springboot项目(即maven项目&#xf…

Mac读写NTFS格式硬盘的神器2024免费版Tuxera NTFS for Mac

Mac读写NTFS格式硬盘的神器——Tuxera NTFS for Mac,让你的数据传输更加快捷!轻松解决Mac与Windows之间的数据传输难题,Tuxera NTFS for Mac是你不可错过的选择! 随着科技的不断发展,我们的生活中越来越多的设备需要进…

GIS设计与开发的学习笔记

目录 一、简答题 1.GeoDatabase数据模型结构类型与四种关系。 2.组件式GIS的基本思想是什么? 3.请简述创建空间书签的实现逻辑。 4.请问与地理要素编辑相关的类有哪些?(列举至少五个类) 5.利用ArcGIS Engine提供的栅格运算工…

gitLab server version 13.12.1 is not supported

拉代码的时候,报的这个错,实际上就是因为gitLab 版本太低了,这里不准备升级版本,打算继续使用账号密码来拉取代码 在idea已经安装的插件中,去掉gitlab插件,如下: 之后再拉取代码,就…

多进程数据库不适合作为hive的元数据库

简介 “今天发现一个比较奇怪的现象,因为博主不熟悉mysql,所以在安装hive的使用了postgresql作为hive的元数据库,在测试几个连接工具对hive进行链接,后面再测试的时候发现链接不上了,并且报错日志如下:” …

HTTPS证书是什么?多少钱?

HTTPS证书,其实就是SSL证书或者TLS证书,它就像是个网络保安,专门保护你的网站和用户浏览器之间的聊天内容不被坏人偷听或者改掉。当你给网站装上有效的HTTPS证书后,网址前面就会出现"https://",旁边可能还会…

【Linux第三课-基础开发工具的使用】yum、vim、gcc/g++编译器、gdb、Make/Makefile编写、进度条程序、git命令行简单操作

目录 yum - 软件包管理器快速认识yum快速使用yumyum搜索yum安装yum卸载 yum的周边 - yum的整个生态问题 vim快速介绍vimvim的模式命令模式插入模式低行模式 常见模式 -- 命令、低行命令模式 -- 光标的移动命令模式 -- 复制粘贴、剪贴、删除命令模式 -- 小写/大写替换模式命令模…

linux命令(二)

环境变量 在这里我说一下linux的环境变量 windows的环境变量大家应该都用的很熟吧,在这里说一下linux怎么查看以及设置环境变量 首先是查看环境变量 export这就会列出来所有的环境变量 既然能看到环境变量,那如何进行设置呢 首先先试试echo $PATH看看…

外包干了14天,技术退步明显。。。

先说一下自己的情况,本科生,2019年我通过校招踏入了成都一家软件公司,开始了我的职业生涯。那时的我,满怀热血和憧憬,期待着在这个行业中闯出一片天地。然而,随着时间的推移,我发现自己逐渐陷入…

数据结构试卷第九套

1.时间复杂度 2.树,森林,二叉树的转换 2.1树转二叉树 给所有的兄弟节点之间加一条连线;去线,只保留当前根节点与第一个叶子节点的连线,删除它与其他节点之间的连线;然后根据左孩子右兄弟进行调整&#xf…

C++第六弹---类与对象(三)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、类的6个默认成员函数 2、构造函数 2.1、概念 2.2、特性 3、析构函数 3.1、概念 3.2、特性 3.3、调用顺序 总结 1、类的6个默认成员函数…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.1 基础知识

2.1.1 总账模块的基本功能 总账模块(General Ledger,GL)是“总分类账会计模块”的中文简称,它是财务会计(FI)模块的一个子模块,它是一切会计事务处理的核心模块。 它的基本功能有会计科…

【Linux】Linux工具学习之gcc/g++

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 接上文,我们已经学习了 Linux 中的编辑器 vim 的相关使用方法,现在…

WordPress Plugin NotificationX插件 SQL注入漏洞复现(CVE-2024-1698)

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。 0x02 漏洞概述 WordPress plugin NotificationX是一个应用插件。2.8.2版本及之前 存在安全漏洞,该…

【RAG实践】基于 LlamaIndex 和Qwen1.5搭建基于本地知识库的问答机器人

什么是RAG LLM会产生误导性的 “幻觉”,依赖的信息可能过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。 正是在这样的背景下,检索增强生成技术(Retrieval-Augmented G…

第八篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读使用Python库清洗处理从PDF文件提取的文本

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、Python清洗处理文本的常见步骤二、使用Python库去除非文本元素示例代码三、使用Python库去除格式化元素的示例代码四、使用Python库去除空白字符示例代码五、使用Python库合并段落和行示…

Oracle P6 Professional 配置连接数据库总结

前言 P6 Professional作为Oracle P6计划管理系统的重要套件之一,其操作出色,体检佳,是非常多的计划工程师跟踪项目进度计划的辅助工具。自20年前,Professional一直在不断的演变更新,以适应当前的新技术,从…

什么是可回收箱?可回收箱能回收哪些物品?具有哪些功能?

可回收箱是指专门用于收集居民或单位产生的、适宜回收和资源化利用的废弃物的容器。这些箱子通常会按照垃圾分类的标准进行设计,贴有明确标识,不同类型的可回收箱可能在开口大小、形状等方面有所不同,以适应不同类型可回收物的投放需求&#…

电源配小了,是不是容易烧?是的!

电源小的话会不会容易烧毁? 是的。 功率电压*电流。 随着功率增大,电压不变,电流增大,发热量增大,可能会烧毁。 今天给大家推荐一款650w的电脑电源,不过在推荐之前,首先要确认自己的电脑功耗…