吴恩达机器学习-可选实验室:神经元和层(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年最新腾讯云免费…

【Git详细讲解-必看】

Git详细介绍-必看 1. 介绍2. 核心概念3. Git的基本操作4. 高级功能 1. 介绍 Git是一个分布式版本控制系统,由Linus Torvalds在2005年创建,最初的目的是为了更好地管理Linux内核的开发,Git如今已经成为世界上最受欢迎的版本控制系统之一&…

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

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

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

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

C++ 中的虚函数和多态性

C 是一种高级编程语言,它具有面向对象编程的特性。在 C 中,虚函数和多态性是非常重要的概念,它们使得继承关系更加灵活和强大。 虚函数是在基类中声明为虚函数的成员函数,其作用是在运行时动态绑定函数的调用。当在派生类中重写基…

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

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

【晴问算法】入门篇—贪心算法—最大组合整数

题目描述 现有0~9中各个数的个数,将它们组合成一个整数,求能组合出的最大整数。 输入描述 在一行中依次给出0-9中各个数的个数(所有个数均在0-100之间)。数据保证至少有一个数的个数大于0。 输出描述 输出一个整数,表示…

Python网络爬虫内容介绍

Python爬虫是使用Python语言编写的网络爬虫程序,用于从互联网上自动抓取、解析和处理数据。爬虫可以模拟人类的行为,自动访问网页、提取所需信息,并将这些信息保存到本地或数据库中,以供后续分析和使用。 Python爬虫的内容主要包…

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

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

【NC14399】素数判断

题目 素数判断 分解质因数 思路 题目很直接,给你一个数,判断其是不是素数,如果是,输出一句话和它本身,如果不是,输出一句话和它的质因数,需要注意的是质因数要从小到大输出。 我们知道&#x…

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

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

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

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

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

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

PyTorch学习笔记之激活函数篇(六)

6、RReLU函数 对应的论文链接&#xff1a;https://arxiv.org/pdf/1505.00853.pdf 6.1 公式 RReLU函数的公式&#xff1a; f ( x ) { x , x > 0 α x , x < 0 f(x) \begin{cases} x&,x>0 \\ \alpha x&,x<0 \end{cases} f(x){xαx​,x>0,x<0​ …

rust - 一个日志缓存记录的通用实现

本文给出了一个通用的设计模式&#xff0c;通过建造者模式实例化记录对象&#xff0c;可自定义格式化器将实例化后的记录对象写入到指定的缓存对象中。 定义记录对象 use chrono::prelude::*; use std::{cell::RefCell, ffi::OsStr, fmt, io, io::Write, path::Path, rc::Rc,…

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

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

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

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

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

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

企业微信H5文件下载。

废话不多说&#xff0c;直接上代码。 1.判断是不是企业微信打开的 const ua navigator.userAgent.toLowerCase() if (/micromessenger/.test(ua)) {} 2.复制功能 navigator.clipboard.writeText(newsUrl).then(() > {this.$message({message: 您已复制文件链接&#xff…

leetcode513找树左下角的值

解法1&#xff1a;BFS 思路就是层序遍历 用队列记住每层的元素&#xff0c;如果每次记住每层的第一个元素 ---->https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html#_102-%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A…