吴恩达机器学习-可选实验室:神经元和层(Neurons and Layers)

文章目录

    • 可选实验室:神经元和层
    • 无激活神经元-回归/线性模型
    • Sigmoid激活的神经元
    • 祝贺

可选实验室:神经元和层

实验室将探索神经元和层的内部工作原理,特别是将课程1中掌握的模型,即回归/线性模型和逻辑斯蒂模型,与之进行对比。本实验室将介绍Tensorflow并演示这些模型是如何在该框架中实现的。
在这里插入图片描述

Tensorflow和Keras
Tensorflow是谷歌开发的机器学习包。2019年,谷歌将Keras集成到Tensorflow中,并发布了Tensorflow 2.0。Keras是一个由franois Chollet独立开发的框架,它为Tensorflow创建了一个简单的、以层为中心的接口。本课程将使用Keras接口。

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras import Sequential
from tensorflow.keras.losses import MeanSquaredError, BinaryCrossentropy
from tensorflow.keras.activations import sigmoid
from lab_utils_common import dlc
from lab_neurons_utils import plt_prob_1d, sigmoidnp, plt_linear, plt_logistic
plt.style.use('./deeplearning.mplstyle')
import logging
logging.getLogger("tensorflow").setLevel(logging.ERROR)
tf.autograph.set_verbosity(0)

后两行代码的含义是设置 TensorFlow 的日志级别,将 TensorFlow 的日志级别设置为 ERROR 级别,从而只记录 ERROR 级别及以上的日志信息,不记录更低级别的日志信息。
另外,tf.autograph.set_verbosity(0)这行代码是设置 AutoGraph 的日志级别,将 AutoGraph 的日志级别设置为 0,表示不输出任何日志信息。 AutoGraph 是 TensorFlow 中用于将普通 Python 代码转换成 TensorFlow 计算图的工具,设置日志级别为 0 可以关闭 AutoGraph 的日志输出,减少不必要的输出信息。

无激活神经元-回归/线性模型

数据集
我们将使用课程一的例子,房价的线性回归。

X_train = np.array([[1.0], [2.0]], dtype=np.float32)           #(size in 1000 square feet)
Y_train = np.array([[300.0], [500.0]], dtype=np.float32)       #(price in 1000s of dollars)fig, ax = plt.subplots(1,1)
ax.scatter(X_train, Y_train, marker='x', c='r', label="Data Points")
ax.legend( fontsize='xx-large')
ax.set_ylabel('Price (in 1000s of dollars)', fontsize='xx-large')
ax.set_xlabel('Size (1000 sqft)', fontsize='xx-large')
plt.show()

在这里插入图片描述
回归/线性模型
未激活的神经元实现的函数与课程1线性回归相同:
在这里插入图片描述

我们可以用一个神经元或单元定义一个层,并将其与熟悉的线性回归函数进行比较。

linear_layer = tf.keras.layers.Dense(units=1, activation = 'linear', )

在这里,'linear’激活函数的作用是保持输出与输入之间的线性关系。在神经网络中,每个层的输出通常会通过一个激活函数来进行非线性变换,以提供网络学习非线性关系的能力。然而,当我们希望保持线性关系时,可以选择使用’linear’激活函数,它实际上仅仅是一个恒等函数,不会对输入进行任何改变。
在这种情况下,Dense层实际上只是执行矩阵相乘和偏置加法,没有经过任何非线性变换,因此输出与输入之间的关系仍然是线性的。这在某些回归任务或特定的网络架构中可能是有用的。

我们来看看权重。

linear_layer.get_weights()

在这里插入图片描述
没有权重,因为权重尚未实例化。
让我们在X_train的一个例子上试试这个模型。
这将触发权重的实例化。
注意,图层的输入必须是二维的,所以我们将重塑它。

a1 = linear_layer(X_train[0].reshape(1,1))
print(a1)

在这里插入图片描述

结果是一个形状为(1,1)或一个条目的张量(数组的另一个名称)。现在让我们来看看权重和偏差。这些权重被随机初始化为较小的数字,并且偏置默认被初始化为零。

w, b= linear_layer.get_weights()
print(f"w = {w}, b={b}")

在这里插入图片描述

具有单个输入特征的线性回归模型(1)将具有单个权重和偏差。这与我们上面1层的尺寸相匹配。
权重被初始化为随机值,所以让我们将它们设置为一些已知值。

set_w = np.array([[200]])
set_b = np.array([100])# set_weights takes a list of numpy arrays
linear_layer.set_weights([set_w, set_b])
print(linear_layer.get_weights())

在这里插入图片描述
让我们将方程(1)与层输出进行比较。

a1 = linear_layer(X_train[0].reshape(1,1))
print(a1)
alin = np.dot(set_w,X_train[0].reshape(1,1)) + set_b
print(alin)

在这里插入图片描述

可以看出无论是用参数设置好的模型计算还是用点积运算得到的结果是一样的。
它们产生相同的值!现在,我们可以使用我们的线性层对我们的训练数据进行预测。

prediction_tf = linear_layer(X_train)
prediction_np = np.dot( X_train, set_w) + set_b
plt_linear(X_train, Y_train, prediction_tf, prediction_np)

在这里插入图片描述

Sigmoid激活的神经元

具有Sigmoid激活的神经元/单元实现的功能与课程1中的逻辑回归相同:
在这里插入图片描述
让我们设置𝑤和𝑏并检查模型。
数据集
我们将使用课程1中的一个例子,逻辑回归。

X_train = np.array([0., 1, 2, 3, 4, 5], dtype=np.float32).reshape(-1,1)  # 2-D Matrix
Y_train = np.array([0,  0, 0, 1, 1, 1], dtype=np.float32).reshape(-1,1)  # 2-D Matrix
pos = Y_train == 1
neg = Y_train == 0
X_train[pos]

在这里插入图片描述

pos = Y_train == 1
neg = Y_train == 0fig,ax = plt.subplots(1,1,figsize=(4,3))
ax.scatter(X_train[pos], Y_train[pos], marker='x', s=80, c = 'red', label="y=1")
ax.scatter(X_train[neg], Y_train[neg], marker='o', s=100, label="y=0", facecolors='none', edgecolors=dlc["dlblue"],lw=3)ax.set_ylim(-0.08,1.1)
ax.set_ylabel('y', fontsize=12)
ax.set_xlabel('x', fontsize=12)
ax.set_title('one variable plot')
ax.legend(fontsize=12)
plt.show()

在这里插入图片描述
逻辑神经元

我们可以通过添加Sigmoid激活来实现“逻辑神经元”。神经元的功能然后由上面的(2)描述。
本节将创建一个Tensorflow模型,该模型包含我们的逻辑层,以演示创建模型的替代方法。Tensorflow最常用于创建多层模型。序列模型是构建这些模型的一种方便方法。

model = Sequential([tf.keras.layers.Dense(1, input_dim=1,  activation = 'sigmoid', name='L1')]
)

model.summary()显示模型中的层和参数数量。该模型中只有一个层,而该层只有一个单元。该单元具有两个参数,𝑤和𝑏

model.summary()

在这里插入图片描述

logistic_layer = model.get_layer('L1')
w,b = logistic_layer.get_weights()
print(w,b)
print(w.shape,b.shape)

在这里插入图片描述

让我们将权重和偏差设置为一些已知值。

set_w = np.array([[2]])
set_b = np.array([-4.5])
# set_weights takes a list of numpy arrays
logistic_layer.set_weights([set_w, set_b])
print(logistic_layer.get_weights())

在这里插入图片描述

让我们将等式(2)与层输出进行比较。

a1 = model.predict(X_train[0].reshape(1,1))
print(a1)
alog = sigmoidnp(np.dot(set_w,X_train[0].reshape(1,1)) + set_b)
print(alog)

在这里插入图片描述
它们产生了相同的值!现在,我们可以使用我们的逻辑层和NumPy模型对我们的训练数据进行预测。

以下代码是将训练数据 X_train 和标签 Y_train 以及模型的决策边界可视化出来

plt_logistic(X_train, Y_train, model, set_w, set_b, pos, neg)

在这里插入图片描述
在这里插入图片描述
上面的阴影反映了从0到1变化的sigmoid的输出。

祝贺

你建立了一个非常简单的神经网络,并探索了神经元与课程1中的线性和逻辑回归的相似之处。

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

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

相关文章

2024年腾讯云个人用户免费服务器配置和申请说明

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM,轻量配置可选2核2G3M、2核8G7M和4核8G12M,CVM云服务器可选2核2G3M和2核4G3M配置,腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费…

《AcWing第147场周赛》 牛的语言学(递推) / 孤立点数量(并查集)

文章目录 牛的语言学考察知识:递推 题目链接题目描述思路具体代码及注释 孤立点数量考察知识:并查集 题目链接题目描述思路分析 在这里插入图片描述代码及注释 牛的语言学 考察知识:递推 题目链接 https://www.acwing.com/problem/content…

【网络原理】TCP协议详细解析

文章目录 🌲TCP协议的概念🌸TCP协议段格式🌸TCP的特性 🌳TCP原理详解🌸确认应答机制(安全机制)🌸超时重传机制(安全机制)🌸连接管理(安…

【软考高项】七、信息技术发展之存储、数据库、信息安全

1、存储知识点 存储类型分:封闭式(小型机)和开放式(服务器) 其中开放式又分内置和外挂存储(直连DAS、网格FAS(NAS/SAN)) 2、数据库知识点 数据结构模型: …

MyBatisPlus 之一:Spring 整合 MyBatisPlus 及雪花算法

1. Mybatis-Plus简介 Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。这是官方给的定义,关于mybatis-plus的更多介绍及特性,可以参考http…

蓝桥杯第 6 场 小白入门赛 2.猜灯谜(for + 数组)

思路:注意是环形排列的灯笼,它的谜底是相邻两个灯笼的数字之和。这道题要用到两个数组,ans存答案,a存原数据。数据读入部分就不用说了,重点就是单独写明ans[0]和ans[n-1]两个取值,其他的用for循环数组就可以…

数据结构——栈和队列的表示与实现详解

目录 1.栈的定义与特点 2.队列的定义与特点 3.案例引入 4.栈的表示和操作的实现 1.顺序栈的表示 代码示例: 2.顺序栈的初始化 代码示例: 3.判断栈是否为空 代码示例: 4.求顺序栈长度 代码示例: 5.清空顺序栈 …

如何实现图片上传至服务器

在绝大多数的项目中都会涉及到文件上传等,下面我们来说一下技术派中是如何实现原生图片上传的,这个功能说起来简单,但其实对于技术还是有考验的。图片的上传涉及到IO读写,一个文件上传的功能,就可以把IO流涉及到的知识…

✅技术社区—通过Canal框架实现MySQL与ElasticSearch的数据同步

Canal 是一个由阿里巴巴开源的,基于 Java 的数据库变更日志解析的中间件,其原理是基于Binlog订阅的方式实现,模拟一个MySQL Slave 订阅Binlog日志,从而实现CDC,主要用于实现 MySQL 数据库的增量数据同步。它主要的使用…

模块化项目Eclipse测试网零撸教程

简介:Eclipse 是一个基于 Solana 区块链的初创项目,致力于构建基于 Solana 虚拟机的通用 Layer2 解决方案,为以太坊提供更快速、更通用的 Rollup 技术。其主要用途是为开发者提供构建基于 Solana 虚拟机的 Rollup 应用的平台,解决…

Vue3-响应式基础:单文件和组合式文件

单文件&#xff1a;html <!DOCTYPE html> <html> <head><title>响应式基础</title> </head> <body><div id"app" ><!-- dynamic parameter:同样在指令参数上也可以使用一个 JavaScript 表达式&#xff0c;需要包…

SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)

文章目录 1.整合MyBatis1.需求分析2.数据库表设计3.数据库环境配置1.新建maven项目2.pom.xml 引入依赖3.application.yml 配置数据源4.Application.java 编写启动类5.测试6.配置类切换druid数据源7.测试数据源是否成功切换 4.Mybatis基础配置1.编写映射表的bean2.MonsterMapper…

从零到一构建短链接系统(五)

1.修改UserService Service public class UserServiceImpl extends ServiceImpl<UserMapper, UserDO> implements UserService {public UserRespDTO getUserByUsername(String username) {LambdaQueryWrapper<UserDO> queryWrapper Wrappers.lambdaQuery(UserDO.c…

MySQL实战:监控

监控指标 性能类指标 名称说明QPS数据库每秒处理的请求数量TPS数据库每秒处理的事务数量并发数数据库实例当前并行处理的会话数量连接数连接到数据库会话的数量缓存命中率Innodb的缓存命中率 功能类指标 名称说明可用性数据库是否正常对外提供服务阻塞当前是否有阻塞的会话…

HarmonyOS-鸿蒙系统概述

你了解鸿蒙系统吗&#xff1f; 你看好鸿蒙系统吗&#xff1f; 今年秋季即将推出的HarmonyOS Next 星河版热度空前&#xff0c;一起来了解一下吧。本文将从HarmonyOS 的应用场景、发展历程、架构、开发语言、开发工具、生态建设六个角度聊一聊个人的理解。 1、应用场景 鸿蒙…

深度学习pytorch——拼接与拆分(持续更新)

cat拼接 使用条件&#xff1a;合并的dim的size可以不同&#xff0c;但是其它的dim的size必须相同。 语法&#xff1a;cat([tensor1,tensor2],dim n) # 将tensor1和tensor2的第n个维度合并 代码演示&#xff1a; # 拼接与拆分 a torch.rand(4,32,8) b torch.rand(…

多线程JUC 第2季 wait和notify唤醒机制

一 wait和notify的区别与相同 1.1 wait和notify的作用 1) 使用wait()、notify()和notifyAII()时需要先对调用对象加锁。否则直接调用的话会抛出 IllegalMonitorStateExceptiona。 2) 调用wait()方法后&#xff0c;线程状态。由RUNNING变为WAITING&#xff0c;并将当前线程放置…

【LabVIEW FPGA入门】流水线

LabVIEW中流水线 在当今多核处理器和多线程应用程序的世界中&#xff0c;程序员在开发应用程序时需要不断思考如何最好地利用尖端 CPU 的强大功能。尽管用传统的基于文本的语言构建并行代码可能难以编程和可视化&#xff0c;但 NI LabVIEW 等图形开发环境越来越多地允许工程师和…

【Docker】一文趣谈Docker

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

ELK日志管理实现的3种常见方法

ELK日志管理实现的3种常见方法 1. 日志收集方法 1.1 使用DaemonSet方式日志收集 通过将node节点的/var/log/pods目录挂载给以DaemonSet方式部署的logstash来读取容器日志,并将日志吐给kafka并分布写入Zookeeper数据库.再使用logstash将Zookeeper中的数据写入ES,并通过kibana…