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

本文主要是介绍吴恩达机器学习-可选实验室:简单神经网络(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中构建了一个小型神经网络。希望这个实验室揭示了构成神经网络一层的相当简单和熟悉的功能。

这篇关于吴恩达机器学习-可选实验室:简单神经网络(Simple Neural Network)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832627

相关文章

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

使用EasyExcel实现简单的Excel表格解析操作

《使用EasyExcel实现简单的Excel表格解析操作》:本文主要介绍如何使用EasyExcel完成简单的表格解析操作,同时实现了大量数据情况下数据的分次批量入库,并记录每条数据入库的状态,感兴... 目录前言固定模板及表数据格式的解析实现Excel模板内容对应的实体类实现AnalysisEventLis

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.