吴恩达深度学习第二周作业

news/2024/11/23 2:06:48/

1 .导入库

import numpy as np
import matplotlib.pyplot as plt
import h5py
from lr_utils import load_dataset

2.lr_utils.py代码里的东西

import numpy as np
import h5py

def load_dataset():
#取训练集
train_dataset=h5py.File(‘datasets/train_catvnoncat.h5’,“r”)
#本训练集有209张64x64x3的图像
train_set_x_orig=np.array(train_dataset[“train_set_x”][:])
(m_train,num_px,num_px,3)
#训练之的图像对应的分类,即是否为猫
train_set_y_orig=np.array(train_dataset[“train_set_y”][:])
test_dataset=h5py.File(‘datasets/train_catvnoncat.h5’,“r”)
test_set_x_orig=np.array(test_dataset[“test_set_x”][:])
test_set_y_orig=np.array(test_dataset[“test_set_y”][:])
#此时取出的数据是n行一列的
classes=np.array(test_dataset[“list_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[0]))
return train_set_x_orig,train_set_y_orig,test_set_x_orig,test_set_y_orig,classes

train_set_x_orig,train_set_y,test_set_x_orig,test_set_y,classes=load_dataset()
#检查
index=25
plt.imshow(train-set_x_orig[index]

print(“y=”+str(train_set_y[:,index]+",it’s a " +classes[np.squeeze(train_set_y[:,index])].decode(“utf-8)+”'picture
#维度压缩
m_train=train_set_y.shape[1]
m_test=test_set_y.shape[1]
num_px=train_set_x_orig.shape[1]

#现在看一看我们加载的东西的具体情况
print(“训练集的数量:m_train= “+str(m_train))
print(“测试集的数量:m_test=”+str(m_test))
print(“每张图片的宽/高:num_px=”+str(num_px))
print(“每张图片的大小:(”+str(num_px)+”,”+str(num_px)+“,3)”)
print(“训练集_图片的维数:”+str(train_set_x_orig.shape))
print(“训练集_标签的维数”+str(train_set_y_orig.shape))
print(“测试集——图片的维数”+str(test_set_x_orig.shape))
print(“测试集_标签的维数”+str(test_set_y.shape))
#降维
train_set_x_flatten=train_set_x_orig.reshape(train_set_x_orig.shape[0],-1).T

test_set_x_flatten=test_set_x_orig.reshape(test_set_x_orig.shape[0],-1).T

print(“训练集降维最后的维度:”+str(train_set_x_flatten.shape))
print(“训练集_标签的维度”+str(train_set_y.shape))
print(“测试集降维之后的维度:”+str(test_set_x_flatten.shape))
print(“测试集_标签的维数:”+str(test_set_y.shape))

3.建立神经网络的主要步骤

1.定义模型结构
2.初始化模型的参数

3.循环:
3.1计算当前损失(正向传播)
3.2计算当前梯度(反向传播)
3.3 更新参数(梯度下降)

def sigmoid(z):
s=1/(1+np.exp(-z))
return s

print(“======测试sigmoid”)
print("sigmoid(0)= "+str(sigmoid(0)))
print("sigmoid(9.2)= "+str(sigmoid(9.2)))

得分initialize_with_zeros(dim):
w=np.zeros(shape=(dim,1))
b=0
assert(w.shape==(dim,1))
assert(isinstance(b,float)or isinstance(b,int))

return (w,b)

def propagate(w,b,X,Y):
m=X.shape[1]

A=sigmoid(np.dot(w.T,X)+b)
cost=(-1/m)*np.sum(Y*np.log(A)+(1-Y)*(np.log(1-A)))
dw=(1/m)*np.dot(X,(A-Y).T)
db=(1/m)*np.sum(A-Y)
assert(dw.shape==w.shape)
assert(db.type==float)
cost=np.squeeze(cost)
assert(cost.shape==())grads={"dw":dw,"db":db}
return (grads,cost)

print(“测试propagate========”)
#初试话一些参数
w,b,X,Y=np.array([[1],[2]],2,np.array([[1,2],[3,4]]),np.array([[1,0]]))

grads,cost=propagate(w,b,X,Y)
print("dw= "+str(grads[“dw”]))
print("db= "+str(grads[“db”]))
print("cost= "+str(cost))

#更新参数
def optimize(w,b,X,Y,num_iteration,learning_rate,print_cost=False):
costs=[]
for i in range(num_iterations):
grads,cost =propagate(w,b,X,Y)

    dw=grads["dw"]db=grads["db"]w=w-learning_rate*dwb=b-learning_rate*dbif i%100==0:costs.append(cost)if (print_cost)and(i%100==0):print("迭代的次数:%i,误差值:%f"%(i,cost))params={"w":w,"b":b}grads={"dw":dw,"db":db}
return (params,grads,costs)

def predict(w,b,X):
m=X.shape[1]
Y_prediction=np.zeros((1,m))
w=w.reshape(X.shape[0],1)

A=sigmoid(np.dot(w.T,X)+b)
for i in range(A.shape[1]):Y_prediction[0,i]=1 uf A[0,i]>0.5 else 0assert(Y_prediction.shape==(1,m))
return Y_prediction

print(“=============测试predict”)
w,b,X,Y=np.array([[1],[2]]),2,np.array([[1,2],[3,4]],np.array([[1,0]]))
print("predictions= "+str(predict(w,b,X)))

def model(X_train,Y_train,X_test,Y_test,num_iterations=2000,learning_rate=0.5,print_cost=False):
w,b=initialize_with_zeros(X_train.shape[0])

parameters,grads,costs=optimize(w,b,X_train,Y_train,num_iterations,learning_rate,print_cost)
w,b=parameters["w"],parameters["b"]
Y_prediction_test=predict(w,b,X_test)
Y_prediction_train=predict(w,b,X_train)print("训练集尊缺陷:",format(100-np.mean(np.abs(Y_prediction_train-Y_train))*100),"%")
print("测试集准确性:",format(100-np.mean(np.abs(Y_prediction_test-Y_test))*100),"%")
d={"costs":costs,"Y_prediction_test":Y_prediction_test,"Y_prediction_train":Y_prediction_train,"w":w,"b":b,"learning_rate":learning_rate,"num_iterations":num_iterations

http://www.ppmy.cn/news/550163.html

相关文章

C语言自制华容道游戏代码

程序简介 华容道,画风参考的是手机程序:超级华容道。玩法是将大块移动至下层的中间。随机盘面,难度适中,自动解题。 程序随机了横块纵块数量,所以会有无解或难解,生成函数保证了加载出来的盘面是可玩的&a…

用scratch编写游戏-数字华容道(不移动块法)

前边已写了两篇博客介绍用scratch编写“数字华容道”游戏的方法。在以前设计中有一个误区,认为只有通过移动带数字的块才能完成数字的重新排列。实际上采用克隆法,角色“带数字的块”有25个造型,包括24个数字(1到24)和一个空白造型。其克隆体…

游戏数字华容道的改进

在“用scratch编写游戏-数字华容道”(以后简称“前文”)一文中仅介绍了3行3列数字块的设计方法。本文介绍克隆法,该法在设计更多行和列的数字华容道时,使所有数字块都使用相同的脚本,极大减少了工作量。两方法采用的数据结构基本相同。首先给…

用scratch编写游戏-数字华容道

由于疫情,只能在家,外孙女要学scratch,先学了南海出版社的“编程真好玩”,然后和外孙女一起用scratch编了一些游戏,想把编写步骤和设计思想写出来,和大家交流。刚编了“数字华容道”,就先说它吧…

NOIP2013华容道

NOIP2014华容道 说起来这道题还挺有难度的,我用了两个小时才把它AC,要是在赛场上的话。。。。这种题就果断放弃了 下面步入正题 题目描述 Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次。于是,他想到…

CreateJS实现【益智类数字华容道小游戏】

系列文章 微信小程序(游戏)----拖拽拼图(图片分块和打乱顺序)微信小程序(游戏)----五子棋【taro react】(游戏) ---- 类2048游戏,看看在秦朝,功勋爵位你能到哪一级【taro react】(游戏) ---- 小游戏 2048 的实现1. 预览 1.1 在线h5 益智类数字华容道小游戏 在线h5 益…

最强大脑之《数字华容道》游戏Android端的具体实现

项目地址:https://github.com/ming723/NumberHrd 游戏效果: 前提摘要: 前两天粘贴出来了地址,不知道大家下载了没有,如果玩的话,是不是发现了几个潜在的问题,如果按完开始键后,不停…

python实现华容道游戏(v0.1)

#!python import copy ##Author: Lijun # #History: #V0.1 2021-12-15 #实现基础功能:一种初始化图形,可以人工操作游戏,游戏成功有提示 # # # # #Guanyu11 (*1) ;关羽2*1(水平*竖直,下同) 横条,1个 #zh…