吴恩达机器学习笔记EP6

【构建一个神经网络并训练它】吴恩达机器学习笔记EP6(P51-P60)

从今天开始我将学习吴恩达教授的机器学习视频,下面是课程的连接1.1 欢迎来到机器学习!_哔哩哔哩_bilibili。一共有142个视频,争取都学习完成吧。


构建一个神经网络

参考下图的神经网络架构,构建一个神经网络。

layer_1 = Dense(units=3, activation='sigmoid')
layer_2 = Dense(units=1, activation='sigmoid')
model = Sequential([layer_1, layer_2]) # 直接利用Sequential函数,将若干层按顺序串联起来,从而创建一个神经网络
x = np.array([[200.0, 17.0],
             [120.0, 5.0],
             [425.0, 20.0],
             [212.0, 18.0]])
y = np.array([1, 0, 0, 1])
model.compile(loss=tf.keras.losses.BinaryCrossentropy()) # 定义损失函数等
model.fit(x, y) # 告诉TensorFlow这个神经网络对应的训练数据(输入和标签)

# 定义新的输入数据
x_new = np.array([[150.0, 10.0],
                  [300.0, 15.0]])

model.predict(x_new) # 推理

手写数字识别中更多隐藏层的示例

layer_1 = Dense(units=25, activation='sigmoid')
layer_2 = Dense(units=15, activation='sigmoid')
layer_3 = Dense(units=3, activation='sigmoid')
model = Sequential([layer_1, layer_2, layer_3])

我们可以向上面这样构建多层模型,如果层数很多,我们可以简写成下面这样:

model = Sequential([
    Dense(units=25, activation='sigmoid'),
    Dense(units=15, activation='sigmoid'),
    Dense(units=3, activation='sigmoid')])

在一个单层中的前向传播

下面是在一个单层中实现前向传播的过程。主要介绍了神经网络当中一些数据的定义方法。

前向传播的一般实现

在Numpy中实现前向传播。

用Numpy数据库构架某一层中的传播方法:

def dense(a_in, W, b, g):
    units = W.shape[1]
    a_out = np.zero(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

把每一层组合起来可以构建出前向传播方法:

def sequential(x):
    a1 = dense(x, W1, b1)
    a2 = dense(a1, W2, b2)
    a3 = dense(a2, W3, b3)
    a4 = dense(a3, W4, b4)
    f_x = a4
    return f_x

是否有路通向AGI(通用人工智能)?

AI有两个分支:在某个特定领域表现出色的ANI和可以用于所有领域任务的AGI

人们一直致力于构架一个AGI,但是目前依旧没有很好的思路。

目前主要的两个想法:

仿照人脑构建神经网络模型。但是目前人类自己对自己的大脑都了解甚少,更别说仿照人脑去构架神经网络了。所以目前神经网络只是一个叫法,其本身早已脱离了仿照人类大脑这一思路了。

还有一种方法就是构建一个可以自己学习的算法,让其自己去适应不同的数据集。

向量化,高效实现神经网络

向量化可以帮助更高效的构建神经网络。

比如dense函数的定义可以用向量化的方式更简易的构建出来:

def dense(A_in, W, B):
    Z = np.matmul(A_in, W) + B # matmul由于矩阵乘法的实现
    A_out = g(Z)
    return A_out

点乘

如下图是点乘和向量转置的方法:

向量和矩阵相乘

如下图是向量和矩阵相乘的方法:

矩阵乘法

如下图是矩阵乘法的方法:

矩阵乘法的规则

如下图是矩阵乘法的规则。

需要注意的是,两个矩阵相乘,前一个矩阵的列数和后一个矩阵的行数必须相同,否则无法相乘。

矩阵乘法代码

如下图是矩阵的一些定义方法。

matmul矩阵乘法也可以用@直接写。

下面是使用向量化表示一个层:

AT = np.array([[200, 17]])
W = np.array([[1, -3, 5],
             [-2, 4, -6]])
b = np.array([[-1, 1, 2]])

# g用sigmoid函数的定义
def g(z):
    return 1 / (1 + np.exp(-z))


def dense(A_in, W, B):
    Z = np.matmul(A_in, W) + B # matmul由于矩阵乘法的实现
    A_out = g(Z)
    return A_out

print(dense(AT, W, b))

TensorFlow实现神经网络训练

下面是整个神经网络训练的简单实现代码,和上面写的差不多,这里就不重复了。

整体步骤就是先定义神经网络,然后定义损失函数等,最后进行训练。

训练细节

构建模型

定义损失函数和代价函数

梯度下降

评论

  1. 大评论家
    4 月前
    2024-7-18 23:52:10

    量好大,哥们儿!

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇