吴恩达猫咪识别—深度神经网络构建笔记

如何构建神经网络

  1. 首先导入在此作业中需要的所有包
  2. 初始化𝐿层神经网络参数。
  3. 前向传播
  4. 计算损失函数
  5. 后向传播
  6. 更新参数
    在这里插入图片描述

导入在此作业中需要的所有包

import numpy as np //numpy是使用Python进行科学计算的主要包。
import h5py
import matplotlib.pyplot as plt //matplotlib是一个用于在Python中绘制图形的库。
from testCases_v2 import *
from dnn_utils_v2 import sigmoid, sigmoid_backward, relu, relu_backward //Dnn_utils提供了一些必要的函数。%matplotlib inline
plt.rcParams['figure.figsize'] = (5.0, 4.0) # set default size of plots
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'
//plt(matplotlib.pyplot)使用rc配置文件来自定义图形的各种默认属性,称之为rc配置或rc参数。%load_ext autoreload //自动加载扩展
%autoreload 2np.random.seed(1) //np.random.seed()函数用于生成指定随机数。

初始化参数

深度L层神经网络的初始化很复杂,因为有更多的权矩阵和偏置向量。在完成initialize_parameters_deep()时,应该确保每个层之间的维度匹配。

def initialize_parameters_deep(layer_dims)://layer_dims为一个数组,代表层数与对应的权矩阵维度np.random.seed(3)parameters = {}L = len(layer_dims) //深度网络层数for l in range(1, L):parameters["W"+str(l)] = np.random.randn(layer_dims[l],layer_dims[l-1])*0.01parameters["b"+str(l)] = np.zeros((layer_dims[l],1))assert(parameters['W' + str(l)].shape == (layer_dims[l], layer_dims[l-1]))assert(parameters['b' + str(l)].shape == (layer_dims[l], 1))return parameters

测试一下

parameters = initialize_parameters_deep([5,4,3])
print("W1 = " + str(parameters["W1"]))
print("b1 = " + str(parameters["b1"]))
print("W2 = " + str(parameters["W2"]))
print("b2 = " + str(parameters["b2"]))

输出结果为

W1 = [[ 0.01788628  0.0043651   0.00096497 -0.01863493 -0.00277388][-0.00354759 -0.00082741 -0.00627001 -0.00043818 -0.00477218][-0.01313865  0.00884622  0.00881318  0.01709573  0.00050034][-0.00404677 -0.0054536  -0.01546477  0.00982367 -0.01101068]]
b1 = [[0.][0.][0.][0.]]
W2 = [[-0.01185047 -0.0020565   0.01486148  0.00236716][-0.01023785 -0.00712993  0.00625245 -0.00160513][-0.00768836 -0.00230031  0.00745056  0.01976111]]
b2 = [[0.][0.][0.]]

前向传播

将前向传播中的ZL=WLAL-1+bL和保存缓存提取出来作为公共方法linear_forward()。

def linear_forward(A, W, b):Z = np.dot(W,A)+bassert(Z.shape == (W.shape[0], A.shape[1]))cache = (A, W, b)return Z, cache

因为有L-1层的RELU函数+1层的SIGMIOD函数,linear_activation_forward()中要新增一个参数作为relu和sigmiod的选择


def linear_activation_forward(A_prev, W, b, activation):if activation == "sigmoid":Z,linear_cache = linear_forward(A_prev, W, b)A,activation_cache = sigmoid(Z)elif activation == "relu":Z,linear_cache = linear_forward(A_prev, W, b)A,activation_cache = relu(Z) assert (A.shape == (W.shape[0], A_prev.shape[1]))cache = (linear_cache, activation_cache)return A, cache

sigmoid函数:A = 1/(1+np.exp(-Z))
relu函数:A = np.maximum(0,Z)
linear_cache:A,W,b
activation_cache:Z

测试一下

A_prev, W, b = linear_activation_forward_test_case()A, linear_activation_cache = linear_activation_forward(A_prev, W, b, activation = "sigmoid")
print("With sigmoid: A = " + str(A))A, linear_activation_cache = linear_activation_forward(A_prev, W, b, activation = "relu")
print("With ReLU: A = " + str(A))

输出结果为

With sigmoid: A = [[0.96890023 0.11013289]]
With ReLU: A = [[3.43896131 0.        ]]

在完成了上面两个函数后,现在我们来实现多层前向传播。

X:数据,numpy数组(输入大小,示例数量)
parameters:为初始化时initialize_parameters_deep()的输出
L:parameters中存放的是W,b为一对,所有除2为一层

def L_model_forward(X, parameters):caches = []A = XL = len(parameters) // 2        for l in range(1, L):A_prev = A A, linear_activation_cache = linear_activation_forward(A_prev, parameters["W"+str(l)], parameters["b"+str(l)], activation = "relu")caches.append(linear_activation_cache)AL, linear_activation_cache = linear_activation_forward(A, parameters["W"+str(L)], parameters["b"+str(L)], activation = "sigmoid")caches.append(linear_activation_cache)assert(AL.shape == (1,X.shape[1]))return AL, caches

测试一下

X, parameters = L_model_forward_test_case()
AL, caches = L_model_forward(X, parameters)
print("AL = " + str(AL))
print("Length of caches list = " + str(len(caches)))

输出结果为

AL = [[0.17007265 0.2524272 ]]
Length of caches list = 2

计算损失函数

损失函数可以很好的衡量你的预估值和实际值的差距
在这里插入图片描述

def compute_cost(AL, Y):m = Y.shape[1]cost = (-1/m)*np.sum(np.log(AL)*Y+np.log(1-AL)*(1-Y))cost = np.squeeze(cost)    assert(cost.shape == ())return cost

测试一下

Y, AL = compute_cost_test_case()print("cost = " + str(compute_cost(AL, Y)))

输出结果为

cost = 0.41493159961539694

反向传播

反向传播用于计算损失函数相对于参数的梯度。
在这里插入图片描述与正向传播类似,您将分三步构建反向传播:

  1. 线性反向传播
  2. 线性->激活函数反向传播,其中激活函数计算ReLU或sigmoid的导数
  3. 全模型反向传播([LINEAR -> RELU] *(L-1)-> LINEAR -> SIGMOID)

所以,第一步,假设你已经计算了导数dZL,你想要得到dWL,dbL,dAL-1,公式如下:
在这里插入图片描述
第一步:

def linear_backward(dZ, cache):A_prev, W, b = cachem = A_prev.shape[1] //获得A_prev中的数据数量dA_prev = np.dot(W.T,dZ)dW = np.dot(dZ,A_prev.T)/mdb = np.sum(dZ,axis = 1 , keepdims = True)/massert (dA_prev.shape == A_prev.shape)assert (dW.shape == W.shape)assert (db.shape == b.shape)return dA_prev, dW, db

第二步:

def linear_activation_backward(dA, cache, activation):linear_cache, activation_cache = cacheif activation == "relu":dZ = relu_backward(dA, activation_cache)dA_prev, dW, db = linear_backward(dZ, linear_cache)elif activation == "sigmoid":dZ = sigmoid_backward(dA, activation_cache)dA_prev, dW, db = linear_backward(dZ, linear_cache)return dA_prev, dW, db

辅助函数如下:

  def relu_backward(dA, cache):Z = cachedZ = np.array(dA, copy=True)dZ[Z <= 0] = 0assert (dZ.shape == Z.shape)return dZ

因为relu大于0的情况导数为1,小于0的情况导数为0,因此反向推导时只需要将输入小于0的部分设置为0即可。

 def sigmoid_backward(dA, cache):Z = caches = 1/(1+np.exp(-Z))dZ = dA * s * (1-s)assert (dZ.shape == Z.shape)return dZ

第三步:
我们写好了反向传播函数,现在写一个全模型反向传播,我们知道最后输出的值是AL=sigmoid(ZL),我们需要计算出第一个反向传播所需要的dAL,用这个公式:
在这里插入图片描述

def L_model_backward(AL, Y, caches):grads = {}L = len(caches)m = AL.shape[1]Y = Y.reshape(AL.shape) dAL = - (np.divide(Y, AL) - np.divide(1 - Y, 1 - AL))current_cache = caches[L-1]grads["dA" + str(L)], grads["dW" + str(L)], grads["db" + str(L)] = linear_activation_backward(dAL, current_cache, activation = "sigmoid")for l in reversed(range(L - 1)):current_cache = caches[l]dA_prev, dW, db = linear_activation_backward(grads["dA" + str(l + 2)], current_cache, activation = "relu")grads["dA" + str(l+1)]=dA_prevgrads["dW" + str(l+1)]=dWgrads["db" + str(l+1)]=dbreturn grads

测试一下

AL, Y_assess, caches = L_model_backward_test_case()
grads = L_model_backward(AL, Y_assess, caches)
print ("dW1 = "+ str(grads["dW1"]))
print ("db1 = "+ str(grads["db1"]))
print ("dA1 = "+ str(grads["dA1"]))

输出结果为

dW1 = [[0.41010002 0.07807203 0.13798444 0.10502167][0.         0.         0.         0.        ][0.05283652 0.01005865 0.01777766 0.0135308 ]]
db1 = [[-0.22007063][ 0.        ][-0.02835349]]
dA1 = [[ 0.          0.52257901][ 0.         -0.3269206 ][ 0.         -0.32070404][ 0.         -0.74079187]]

更新参数

def update_parameters(parameters, grads, learning_rate):L = len(parameters) for l in range(L):parameters["W" + str(l+1)] = parameters["W" + str(l+1)] - learning_rate*grads["dW"+str(l+1)]parameters["b" + str(l+1)] = parameters["b" + str(l+1)] - learning_rate*grads["db"+str(l+1)]return parameters

测试一下

parameters, grads = update_parameters_test_case()
parameters = update_parameters(parameters, grads, 0.1)print ("W1 = "+ str(parameters["W1"]))
print ("b1 = "+ str(parameters["b1"]))
print ("W2 = "+ str(parameters["W2"]))
print ("b2 = "+ str(parameters["b2"]))

输出结果为

W1 = [[-0.59562069 -0.09991781 -2.14584584  1.82662008][-1.76569676 -0.80627147  0.51115557 -1.18258802][-1.0535704  -0.86128581  0.68284052  2.20374577]]
b1 = [[-0.04659241][-1.28888275][ 0.53405496]]
W2 = [[-0.55569196  0.0354055   1.32964895]]
b2 = [[-0.84610769]]

将上述所有步骤依次组装,即可实现一个简单的深度学习网络

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43260.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kaggle猫狗分类

本文介绍使用CNN卷积神经网络完成猫狗图像识别&#xff0c;数据集来源于kaggle&#xff1a;[猫狗分类数据集]。主要包括以下三部分&#xff1a; 数据创建与预处理神经网络模型搭建数据增强实现减小正则化 数据处理 数据集包含25000张图片&#xff0c;猫和狗各有12500张&…

CNN实现猫狗分类

一、实验原理 模型的输入数据是包含猫狗信息的RGB图像&#xff0c;将其输入到网络模型中&#xff0c;经过模型的前向计算得到输出的二分类结果&#xff0c;通过损失函数度量计算输出结果与输入图像标签的差异度&#xff0c;并通过反向传播算法根据这个差异来调整网络各层的参数…

猫舍内网靶场

文章目录 内网渗透我们首先先讲一下&#xff0c;如何去利用sql注入漏洞url编码就是16进制提权 下面是详细的提权过程最后讲一个工具猕猴桃mimikatz 内网渗透 我们首先先讲一下&#xff0c;如何去利用sql注入漏洞 先讲两个导出文件的函数 into dumpfile C:\\phpstudy\\WWW\\1…

手工注入(猫舍为例)

第一步&#xff0c;判断是否存在sql注入漏洞 ?id1 and 11(and 11 可以去掉) ?id1 and 12 第二步:判断字段数 ?id1 and 11 order by 1 ?id1 and 11 order by 2 ?id1 and 11 order by 3 第三步&#xff1a;判断回显点 ?id1 and 12 union select 1,2 第四步:查询相关…

猫狗分类-简单CNN

文章 1.导入第三方库2.定义模型3.训练数据和测试数据生成4.训练模型 猫狗分类的数据集可以查看图像数据预处理。 代码运行平台为jupyter-notebook&#xff0c;文章中的代码块&#xff0c;也是按照jupyter-notebook中的划分顺序进行书写的&#xff0c;运行文章代码&#xff0c;直…

基于卷积神经网络VGG的猫狗识别

&#xff01;有需要本项目的实验源码的可以私信博主&#xff01; 摘要&#xff1a;随着大数据时代的到来&#xff0c;深度学习、数据挖掘、图像处理等已经成为了一个热门研究方向。深度学习是一个复杂的机器学习算法&#xff0c;在语音和图像识别方面取得的效果&#xff0c;远远…

宠物交易平台的设计

国内宠物行业的快速发展&#xff0c;人们为了能够更加方便地管理宠物交易&#xff0c;宠物交易平台被人们开发出来从而更好地方便管理宠物交易&#xff0c;一个完美的宠物交易平台已经成为各个宠物店的追求目标。 本系统利用SSM技术进行开发宠物交易平台是未来的趋势。该系统使…

深度学习实现猫狗分类

本文使用vgg网络实现对猫狗分类。 可以当做图像分类的一个baseline。 一、前期工作 数据&#xff1a;直接到kaggle上下载相应的数据集即可。 1.导入模块 # 数据import torchfrom torchvision.datasets import ImageFolderimport torch.utils.data as Datafrom torchvision impo…

深度学习--猫狗图像分类

1、环境介绍 python3.6&#xff0c;tensorflow1.4版本&#xff0c;pycharm编译器 2、函数库导入 import cv2 import matplotlib.pyplot as plt import os, PIL, pathlib import numpy as np from tensorflow.keras.layers import Conv2D,MaxPooling2D,Dropout,Dense,Flatten,A…

Kaggle-猫狗图像分类全流程实践(支持迁移学习和其他分类任务迁移)

1、insatll environment|安装环境 !pip install torchtoolbox !pip install torchsummary2、import package|导入三方库 # 基础库 import os import time import random import shutil import pandas as pd import csv from math import exp from PIL import Image import nu…

神经网络实战--使用迁移学习完成猫狗分类

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用基于tensorflow和keras的迁移学习完成猫狗分类&#xff0c;欢迎大家一起前来探讨学习~ 本文目录&#xff1a; 一、加载数据集1.调用库函数2.加载数据集3.数据集管理 二、猫狗数据集介绍1.猫狗数据集…

基于Pytorch的猫狗分类

无偿分享~ 猫狗二分类文件下载地址 在下一章说 猫狗分类这个真是困扰我好几天&#xff0c;找了好多资料都是以TensorFlow的猫狗分类&#xff0c;但我们要求的是以pytorch的猫狗分类。刚开始我找到了也运行成功了觉得可以了&#xff0c;最后看了一眼实践要求傻眼了&#xff0c;…

猫舍 靶场

目标url:http://117.41.229.122:8003/?id1 第一步&#xff0c;判断是否存在sql注入漏洞 构造 ?id1 and 11 &#xff0c;回车 页面返回正常 构造 ?id1 and 12 ,回车 页面不正常&#xff0c;初步判断这里 可能 存在一个注入漏洞 第二步:判断字段数 构造 ?id1 and 11 order…

Olaparib 有望治疗 UBQLN4 过表达型肿瘤

基因组的不稳定性是人类遗传病和癌症的一大特点。在这篇文章当中&#xff0c;研究人员在常染色体隐性遗传病家族中发现了有害的 UBQLN4 突变。蛋白酶体穿梭因子UBQLN4 被 ATM 磷酸化并与泛素化的 MRE11 相互作用&#xff0c;从而介导早期的同源重组修复 (HRR)。在体外和体内实验…

神经内分泌肿瘤治疗新进展,神经内分泌肿瘤进展

脑肿瘤复发 。 颅内及椎管内肿瘤【概述】1&#xff0e;原发性肿瘤&#xff1a;起源于头颅、椎管内各种组织结构&#xff0c;如颅骨、脑膜、脑组织、颅神经、脑血管、脑垂体、松果体、脉络丛、颅内结缔组织、胚胎残余组织、脊膜、脊神经、脊髓、脊髓血管及脂肪组织等&#xff…

Nature Cancer | 发现非肿瘤药物的抗癌潜力

今天给大家介绍美国Broad Institute of MIT and Harvard的 Todd R. Golub团队发表在Nature cancer上的一篇文章&#xff1a;“Discovering the anticancer potential of nononcology drugs by systematic viability profiling“。在这个研究中&#xff0c;作者试图创建一个公共…

文献分享:定义的肿瘤抗原特异性T细胞增强了个性化的TCR-T细胞治疗和免疫治疗反应的预测

《Defifined tumor antigen-specifific T cells potentiate personalized TCR-T cell therapy and prediction of immunotherapy response》 简介 从患者体内自然发生的肿瘤抗原特异性T(Tas)细胞中提取的T细胞受体(TCRs)设计的T细胞将靶向其肿瘤中的个人TSAs。为了建立这种个性…

Irinotecan和vandetanib在治疗胰腺癌患者时产生协同效应(Irinotecan and vandetanib create synergies for t)

1. 摘要 背景:在胰腺癌(PAAD)中最常突变的基因对是KRAS和TP53&#xff0c;文章的目标是阐明KRAS/TP53突变的多组学和分子动力学图景&#xff0c;并为KRAS和TP53突变的PAAD患者获得有前景的新药物。此外&#xff0c;文章根据多组学数据尝试发现KRAS与TP53之间可能的联系。    …

癌症/肿瘤免疫治疗最新研究进展(2022年4月)

近年来&#xff0c;免疫治疗一直都是国内外肿瘤治疗研究领域的火爆热点&#xff0c;可以称之为革命性的突破。 除了大家熟知的PD-1/PD-L1已经先后斩获了包括肺癌、胃肠道肿瘤、乳腺癌、泌尿系统肿瘤、皮肤癌、淋巴瘤等在内的近20大实体肿瘤&#xff0c;成为免疫治疗的第一张王牌…

MCE | 癌症诊断和靶向治疗的“遍地开花”

据研究报道&#xff0c;很多癌细胞分泌的外泌体 (Exosome) 比正常细胞分泌的多 10 倍以上。外泌体参与了癌症的发生、进展、转移和耐药性&#xff0c;并通过转运蛋白和核酸&#xff0c;建立与肿瘤微环境的联系。例如&#xff0c;外泌体可导致免疫逃逸&#xff0c;癌细胞的免疫逃…