pyL 1 Week 2 02 用神经网络思想实现Logistic回归

#导入数据
import  h5py
#通过h5 选择加载数据的方式 加载规则 并且根据训练集和测试集分别存放

#查看关键key
for key in train_data.keys():
print(key)
#查看关于key的这样一个维度
train_data['train_set_x'].shape
train_data['train_set_y'].shape
test_data['test_set_x'].shape
test_data['test_set_y'].shape
#取出训练集以及测试集
train_data_org = train_data['train_set_x'][:]
train_labels_org = train_data['train_set_y'][:]
test_data_org = train_data['test_set_x'][:]
test_labels_org = train_data['test_set_y'][:]
#查看图片
import matplotlib.pyplot as plt
%matplotlib inline
plt.imshow(train_data_org[148])
#数据维度的处理
#获取样本的维度个数
m_train = train_data_org.shape[0]
m_test = train_data_org.shape[0]
train_data_tran = train_data_org.reshape(m_train,-1).T
#-1的意思是将后面的三列转变成一列
test_data_tran = test_data_org.reshape(m_test,-1).Tprint(train_data_tran.shape , test_data_tran.shape)
#同样对标签数据也进行处理
#这里使用了np内置的一个工具 目的是增加一个维度
import numpy as np
train_labels_tran = train_labels_org[np.newaxis,:]
test_labels_tran = test_labels_org[np.new axis,:]
#标准化数据
#原因在于像素值一般是大小不均匀的 因为像素值是在0-255之间 所以需要归一化 标准化到0-1之间
#多种方法 按照量程区间
train_data_sta = train_data_tran / 255
test_data_sta = test_data_tran / 255


梯度下降推导 求w以及b的参数值



#定义sigmoid函数
def sigmoid(z):
a = 1 / (1 + np.exp(-z))
return a
#定义前向传播函数 初始化参数
n_dim = train_data_sta.shape[0]
w = np.zeros((n_dim,1))
b=0
#定义前向传播函数、代价函数以及梯度下降def propagate(w,b,X,Y):#1.前向传播函数 np.dot() = np的矩阵相乘
Z = np.dot(w.T,X) + b
A = sigmoid(Z)#2.代价函数
m = X.shape[1]
J = -1/m * np.sum(Y * np.log(A) + (1-Y) * np.log(1-A))axis = 0 (等于0 按列(默认) 等于1 按行)#3.梯度下降
dw = 1 / m * np.dot(X,(A-Y).T)
db = 1 / m * np.sum(A-Y)grands = {'dw' : dw , 'db' : db}return grands,J
#优化部分def optimize(w,b,X,y,alpha,n_iters,print_cost):costs = []for i in range(n_iters):grands,J = propagate(w,b,X,Y)dw = grands['dw']db = grands['db']w = w - alpha * dwb = b - alpha * dbif i % 100 == 0:costs.append(J)if print_cost:print('n_iters is ' , i , 'cost is ' , J)grands = {'dw' : dw , 'db' : db}params = {'dw' : w , 'db' : b}return grand,params,costs
#预测部分
#流程主要就是 通过算出的w,b带入前向传播函数之后 得到Z 以及A A最终是一个概率值(表示一张图的可能性有多大)
def predict(w,b,x_test):Z = np.dot(w.T,x_test) + bA = sigmoid(Z)m = X_test.shape[1] #一共有多少个样本y_pred = np.zeros((1,m)) #放预测值for i in range(m):if A[:,i] > 0.5:y_pred[:i] = 1else:y_pred[:i] = 0return y_pred
#模型整合
#将预测和优化整合到一个模型里面 之后只需要调用模型即可def model(w,b,X_train,y_train,X_tese,y_test,alpha,n_iters,print_cost):grand,params,costs = optimize(w,b,X_train,y_train,alpha,n_iters,print_cost)w = params['w']b = params['b']y_pred_train = predict(w,b,x_train)y_pred_test = predict(w,b,x_test)print('The train acc is',np.mean(y_pred_train == y_train) * 100 , '%')print('The test acc is',np.mean(y_pred_test == y_test) * 100 , '%')d={'w' : w,'b' : b,'costs' : costs,'y_pred_train' : y_pred_train,'y_pred_test' : y_pred_test,'alpha' : alpha}
#预测准确率、代价曲线、单个样本测试
d = model(w,b,train_data_sta,train_labels_tran,test_data_sta,test_labels,alpha = 0.05,n_iters = 2000)#得到的结果有些过拟合
#代价函数的趋势
plt.plot(d['costs'])
plt.xlabel('per hundred iters')
plt.ylabel('cost')
#取其中图片 看是否一致 修改index 进行查看结果
index = 1
print('y is ',test_labels_tran[0,index])
print('y_prediction is ',int(b['y_pred_test'][0,index])plt.imshow(test_data_org[index])
#选取不同的alpha下的区别
alphas = [0.01,0.001,0.0001]
for i in alphas:print('alpha = ',i)d = model(w,b,train_data_sta,train_labels_tran,test_data_sta,test_labels,alpha = i,n_iters = 2000,print_cost = true)print('===================================')plt.plot(d['costs'],label = str(i))
plt.xlabel('per hundred iters')
plt.ylabel('cost')
plt.legend()
#预测新图片 下载一个新的图片 给出一个路径
fname = '路径'
image = plt.imread(fname)
plt.imshow()
#尺寸不一致 所以导入skimage导入包 改变图片的尺寸
from skimage import transform
image_tran = transform.resize(image,(64,64,3)).reshape(64*64*3,1)
image_tran.shape
#加入预测函数之后进行预测即可
y = predict(d['w'],d['b'],image_tran)
print(int(y))

Offer

AILearning 吴恩达 L1 Week2 02 用神经网络思想实现Logistic回归(Cat)相关推荐

  1. 吴恩达深度学习之一《神经网络和深度学习》学习笔记

    一.深度学习概论 1.2 什么是神经网络 如上图所示的房价预测,我们可以把它的线性回归看作一个神经元构成的神经网络.神经元就是那个圈,是一个用于映射计算的函数. 图中使用的是十分常见的 ReLU函数, ...

  2. 吴恩达机器学习(七)神经网络(反向传播)

    目录 0. 前言 1. 代价函数(Cost Function) 2. 反向传播(back propagation) 3. 前向传播和反向传播的结合 4. 梯度检测(gradient checking) ...

  3. 吴恩达机器学习(六)神经网络(前向传播)

    目录 0. 前言 1. 神经网络模型 2. 前向传播(forward propagation) 3. 神经网络中的多分类 学习完吴恩达老师机器学习课程的神经网络,简单的做个笔记.文中部分描述属于个人消 ...

  4. 吴恩达机器学习(九)—— 神经网络:Learning

    吴恩达机器学习系列内容的学习目录→\rightarrow→吴恩达机器学习系列内容汇总. 1. 代价函数 2. 反向传播算法 3. 反向传播算法的直观理解 4. 实现注意:展开参数 5. 梯度下降 6. ...

  5. 吴恩达|机器学习作业4.0神经网络反向传播(BP算法)

    4.0.神经网络学习 1)题目: 在本练习中,您将实现神经网络的反向传播算法,并将其应用于手写数字识别任务.在之前的练习中,已经实现了神经网络的前馈传播,并使用Andrew Ng他们提供的权值来预测手 ...

  6. 吴恩达深度学习笔记——卷积神经网络(Convolutional Neural Networks)

    深度学习笔记导航 前言 传送门 卷积神经网络(Convolutional Neural Networks) 卷积神经网络基础(Foundations of Convolutional Neural N ...

  7. 吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现

    逻辑回归(Logistic Regression)是一个二分分类算法.逻辑回归的目标是最小化其预测与训练数据之间的误差.为了训练逻辑回归模型中的参数w和b,需要定义一个成本函数(cost functi ...

  8. 吴恩达《Machine Learning》精炼笔记 3:回归问题和正则化

    作者 | Peter 编辑 | AI有道 今天带来第三周课程的笔记:梯度下降与正规方程. 主要讲解的内容包含: 逻辑回归 代价函数 线性回归和逻辑回归的比较 正则化问题 逻辑回归 分类问题 假设预测的 ...

  9. 吴恩达机器学习学习笔记第七章:逻辑回归

    分类Classification分为正类和负类 (规定谁是正谁是负无所谓) 吴恩达老师举例几个例子:判断邮箱是否是垃圾邮箱 一个在线交易是否是诈骗 一个肿瘤是良性的还是恶性 如果我们用之前学习的lin ...

最新文章

  1. vim编辑文章后不能修改
  2. 区块链BaaS云服务(32)同盾科技 IASC平台
  3. 机器学习-特征抽取02
  4. windows下如何下载并安装Python 3.5.
  5. Linux——JDK的部署
  6. 【DP】滑雪场的缆车(jzoj 1257)
  7. Java核心类库-IO-File类介绍和路径分割符
  8. CAN笔记(12) 同步
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的健身管理系统
  10. ASP.NET 2.0 调试的一些问题
  11. GitHub:攻击者正在利用被盗 OAuth 令牌攻击数十家组织机构
  12. Apache2.2整合PHP5.2
  13. 使用python对bin文件进行操作
  14. 用计算机分析卫星云图 进行实时天气,卫星云图,气象卫星云图,卫星云图高清实时滚动播放 - 围观天气...
  15. 飞思卡尔智能车参赛感受,以及开源自己搜集的资料
  16. 计算机文档排版的心得体会,排版工作心得体会(共6篇) .docx
  17. 08矩阵加法httpwww.noi.openjudge.cn
  18. DAO 的具体内涵与概念
  19. 谷歌 kaptcha 图片验证码使用教程
  20. android 多渠道打包不同的包名、应用名、应用图标

热门文章

  1. 图机器学习(GML)图神经网络(GNN)原理和代码实现(前置学习系列二)
  2. 数据结构:链表、栈、队列、堆学习
  3. 18 Issues in Current Deep Reinforcement Learning from ZhiHu
  4. linux教程for语句,Bash 中的 For 循环详解
  5. 【笔记】曝光值EV曝光补偿曝光量
  6. html - 移动标签 marquee 属性
  7. 计算机网络(谢希仁-第八版)第五章习题全解
  8. 东八区转为0时区_Java时区转换及时间格式
  9. TypeScript(ts)笔记总结01
  10. 2021年危险化学品经营单位安全管理人员考试资料及危险化学品经营单位安全管理人员新版试题