吴恩达机器学习-C2W1L3-简单神经网络

在本实验中,我们将使用Numpy构建一个小型神经网络。它将是你在Tensorflow中实现的相同的"咖啡烘焙"网络。

python 复制代码
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)

数据集

这是和之前实验相同的数据集。

python 复制代码
X,Y = load_coffee_data();
print(X.shape, Y.shape)

让我们在下面绘制咖啡烘焙数据。两个功能是温度(摄氏)和持续时间(分钟)。在家烘焙咖啡建议时间最好保持在12到15分钟之间,温度应该在175到260摄氏度之间。当然,随着温度的升高,持续时间应该会缩短。

python 复制代码
plt_roast(X,Y)

规范数据

为了匹配之前的实验,我们将数据标准化。请参考该实验室了解更多细节

python 复制代码
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中的Forward Prop)

让我们建立在讲座中描述的"咖啡烘焙网络"。有两层具有s型激活。

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

python 复制代码
def my_dense(a_in, W, b, g):
    """
    Computes dense layer
    Args:
      a_in (ndarray (n, )) : Data, 1 example 
      W    (ndarray (n,j)) : Weight matrix, n features per unit, j units
      b    (ndarray (j, )) : bias vector, j units  
      g    activation function (e.g. sigmoid, relu..)
    Returns
      a_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子例程构建了一个双层神经网络。

python 复制代码
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中复制之前实验室中训练过的权重和偏差。

python 复制代码
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.predict()'的例程开始。这将取一个矩阵 X X X,其中行中有所有 m m m示例,并通过运行模型进行预测。

python 复制代码
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)

我们可以在两个例子中尝试这个例程:

python 复制代码
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] = 1

else:

yhat[i] = 0

print(f"decisions = \n{yhat}")

这可以更简洁地完成:

python 复制代码
yhat = (predictions >= 0.5).astype(int)
print(f"decisions = \n{yhat}")

网络函数

该图显示了整个网络的运行情况,与之前实验室的Tensorflow结果相同。左图是由蓝色阴影表示的最后一层的原始输出。这是覆盖在由X和O表示的训练数据上的。

右图是经过决策阈值后的网络输出。这里的X和O对应于网络做出的决定。

python 复制代码
netf= lambda x : my_predict(norm_l(x),W1_tmp, b1_tmp, W2_tmp, b2_tmp)
plt_network(X,Y,netf)

祝贺!

你已经在NumPy中建立了一个小的神经网络。希望这个实验揭示了构成神经网络层的相当简单和熟悉的函数。

相关推荐
一RTOS一2 小时前
东土科技连投三家核心企业 发力具身机器人领域
人工智能·科技·机器人·具身智能·鸿道实时操作系统·国产嵌入式操作系统选型
ACP广源盛139246256733 小时前
(ACP广源盛)GSV1175---- MIPI/LVDS 转 Type-C/DisplayPort 1.2 转换器产品说明及功能分享
人工智能·音视频
胡耀超3 小时前
隐私计算技术全景:从联邦学习到可信执行环境的实战指南—数据安全——隐私计算 联邦学习 多方安全计算 可信执行环境 差分隐私
人工智能·安全·数据安全·tee·联邦学习·差分隐私·隐私计算
停停的茶5 小时前
深度学习(目标检测)
人工智能·深度学习·目标检测
Y200309165 小时前
基于 CIFAR10 数据集的卷积神经网络(CNN)模型训练与集成学习
人工智能·cnn·集成学习
老兵发新帖5 小时前
主流神经网络快速应用指南
人工智能·深度学习·神经网络
AI量化投资实验室6 小时前
15年122倍,年化43.58%,回撤才20%,Optuna机器学习多目标调参backtrader,附python代码
人工智能·python·机器学习
java_logo6 小时前
vllm-openai Docker 部署手册
运维·人工智能·docker·ai·容器
倔强青铜三6 小时前
苦练Python第67天:光速读取任意行,linecache模块解锁文件处理新姿势
人工智能·python·面试
算家计算6 小时前
重磅突破!全球首个真实物理环境机器人基准测试正式发布,具身智能迎来 “ImageNet 时刻”
人工智能·资讯