cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset

本文介绍了如何用神经网络的思想构建Logistic Regression模型,包括模型的神经元概念、损失函数、梯度更新和参数优化。通过前向传播计算损失,反向传播求解梯度,并使用梯度下降法更新模型参数。还涵盖了数据预处理、模型整合以及绘制学习曲线等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文结构:

  1. 将 Logistic 表达为 神经网络 的形式
  2. 构建模型
    1. 导入包
    2. 获得数据
    3. 并进行预处理: 格式转换,归一化
    4. 整合模型:
      • A. 构建模型
        • a. 初始化参数:w 和 b 为 0
        • b. 前向传播:计算当前的损失
        • c. 反向更新:计算当前的梯度
      • B. 梯度更新求模型参数
      • C. 进行预测
    5. 绘制学习曲线

1. 将 Logistic 表达为 神经网络 的形式

本文的目的是要用神经网络的思想实现 Logistic Regression,输入一张图片就可以判断该图片是不是猫。

那么什么是神经网络呢?
可以看我之前写的这篇文章:

什么是神经网络

其中一个很重要的概念,神经元:

再来看 Logistic 模型的表达:

那么把 Logistic 表达为 神经网络 的形式为:

(关于 Logistic 可以看这两篇文章:
Logistic Regression 为什么用极大似然函数
Logistic regression 为什么用 sigmoid ?

接下来就可以构建模型:


2. 构建模型

我们的目的是学习 w w b 使 cost function J J 达到最小,

方法就是:

  • 通过前向传播 (forward propagation) 计算当前的损失,
  • 通过反向传播 (backward propagation) 计算当前的梯度,
  • 再用梯度下降法对参数进行优化更新 (gradient descent)

关于反向传播可以看这两篇文章:
手写,纯享版反向传播算法公式推导

构建模型,训练模型,并进行预测,包含下面几步:

  1. 导入包
  2. 获得数据
  3. 并进行预处理: 格式转换,归一化
  4. 整合模型:
    • A. 构建模型
      • a. 初始化参数:w 和 b 为 0
      • b. 前向传播:计算当前的损失
      • c. 反向更新:计算当前的梯度
    • B. 梯度更新求模型参数
    • C. 进行预测
  5. 绘制学习曲线

下面进入详细代码:


1. 导入包

引入需要的 packages,
其中,
h5py 是 python 中用于处理 H5 文件的接口,
PIL 和 scipy 在本文是用自己的图片来测试训练好的模型,
load_dataset 读取数据

import numpy as np
import matplotlib.pyplot as plt
import h5py
import scipy
from PIL import Image
from scipy import ndimage
from lr_utils import load_dataset

%matplotlib inline

其中 lr_utils.py 如下,是对 H5 文件进行解析 :

#lr_utils.py  

import numpy as np  
import h5py  

def load_dataset():  
    train_dataset = h5py.File('datasets/train_catvnoncat.h5', "r")  
    train_set_x_orig = np.array(train_dataset["train_set_x"][:]) # your train set features  
    train_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labels  

    test_dataset = h5py.File('datasets/test_catvnoncat.h5', "r")  
    test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set features  
    test_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labels  

    classes = np.array(test_dataset["list_classes"][:]) # the list of classes  

    train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))  
    test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值