一起深度学习

自用记录--深度学习的第一天:识别猫图

题目:

对提供的数据集进行训练,得到某种判断标准(如预测概率,若大于0.5则为猫,小于0,5则不是猫)。
对于输入的图片,判断是否为猫,是则输入1,否则输入0。

数据集合:

1、train_catvnoncat.h5:
训练集,维度为:(209,64,64,3),即209张6464的彩色图片。
2、test_catvnoncat.h5:
测试集,维度为:(50,64,64,3),即50张64
64的彩色图片。

深度学习课程地址:
https://mooc.study.163.com/university/deeplearning_ai#/c
笔记地址:
http://www.ai-start.com/dl2017/
课后作业地址:
https://blog.csdn.net/u013733326/article/details/79827273

代码编写:

1、加载数据集

train_data = h5py.File('E:/Deep_Learning/Resource/datasets/train_catvnoncat.h5',"r")
test_data = h5py.File('E:/Deep_Learning/Resource/datasets/test_catvnoncat.h5',"r")

h5的格式与字典相似,通过key可取得对应的value值。通过for key in train_data 打印可知:train_data中有三个key,分别是list_classes(类别)、train_set_x(图片集合)、train_set_y(输出标签)。

2、取出训练集,测试集

train_data_org = train_data['train_set_x'][:] #取出所有行和所有列
train_label_org = train_data['train_set_y'][:] #取出输出标签
test_data_org = test_data['test_set_x'][:]   #同理,测试集
test_label_org = test_data['test_set_y'][:]

通过 pit.imshow(train_data_org[178]) pit.show()可查看对应的照片

3、进行数据的处理

m_train = train_data_org.shape[0] #训练集样本的数量
m_test =test_data_org.shape[0] #测试样本的数量
train_data_tran = train_data_org.reshape(m_train,-1).T #重新塑形
test_data_tran = test_data_org.reshape(m_test,-1).T #重新塑形
# print(train_data_tran.shape,test_data_tran.shape) #(12288,209) (12288,50)
import numpy as np
train_label_tran = train_label_org[np.newaxis,:]
test_label_tran = test_label_org[np.newaxis,:]
# print(train_label_org.reshape(1,209).shape)  #同上一句,将输出标签转变为 1行209列,实现向量化
# print(train_label_tran.shape)

4、数据标准化

#数据标准化
train_data_sta =train_data_tran / 255
test_data_sta = test_data_tran / 255

5、定义sigmoid函数

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

#初始化参数
n_dim = train_data_sta.shape[0] #取出行数,维度
#print(n_dim)
w = np.zeros((n_dim,1)) #定义一个n行1列的零矩阵
b = 0.0

6、定义向前传播函数、代价函数以及梯度下降

def propagate(w,b,X,y):
    #1、前向传播函数
    z = np.dot(w.T,X) + b
    A = sigmoid(z)

    #2、代价函数
    m =X.shape[1]#获取样本个数
   # print(m)
    J = -1/m *( np.sum(y* np.log(A) + (1-y) * np.log(1-A)))

    #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

7、优化部分

def optimize(w,b,X,y,alpha,n_itern,print_cost):
    """
    :param w: 权重
    :param b: 偏置值
    :param X: 训练集
    :param y: 输出标签
    :param alpha: 学习率
    :param n_itern:  迭代次数
    :return:
    """
    costs = []
    for i in range(n_itern):
        grands ,J = propagate(w,b,X,y)
        dw = grands['dw']
        db = grands['db']
        w = w - alpha * dw
        b = b - alpha * db
        if (i % 100 == 0):
            costs.append(J)
            if print_cost:
                print("代价函数的值为:",J)
    grands = {'dw': dw, 'db': db}
    params = {'w': w, 'b': b}
    return grands,params,costs

8、预测部分

def predict(w,b,X_test):
    z = np.dot(w.T,X_test) + b
    A = 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] = 1
        else:
            y_pred[:, i] = 0
    return y_pred

9、模型整合

def model(w,b,x_train,y_train,X_test,y_test,alpha,n_iters,print_cost):
    grands, 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,'%') #mean 是取均值
    print("the test acc is",np.mean(y_pred_test == y_test)*100,'%') #mean 是取均值
    result = {'w':w,
              'b':b,
              'y_pred_train':y_pred_train,
              'y_pred_test':y_pred_test,
              'costs':costs,
              'alpha':alpha
              }
    return result

10、运行测试

(1)进行训练

result = model(w,b,train_data_sta,train_label_tran,test_data_sta,test_label_tran,alpha=0.05,n_iters=2000)
pit.plot(result['costs'])
pit.xlabel('per hundred iters')
pit.ylabel('cost')
pit.show()

(2)进行新图测试

index = 12
#print('y is ',test_label_tran[0,index])
print("y_prediction is ",int(result["y_pred_test"][0,index]))
pit.imshow(test_data_org[index])
pit.show()

11、修改不同的学习率,查看预测概率大小。

alphas = [0.01,0.001,0.0001]
for i in alphas:
    print('alpha = ',i)
    result = model(w, b, train_data_sta, train_label_tran, test_data_sta, test_label_tran, alpha=i, n_iters=2000,print_cost=False)
    print('-----------')
    pit.plot(result['costs'],label = str(i))
pit.xlabel("per hundred iters")
pit.ylabel('cost')
pit.legend()
pit.show()

12、自定义图片进行预测

result = model(w,b,train_data_sta,train_label_tran,test_data_sta,test_label_tran,alpha=0.01,n_iters=2000,print_cost=False)
fname = 'xxxxxxxxxxxx/d56426d444554c5d68457cb18c6df3c.jpg'
image = pit.imread(fname)  #根据路径读取图片
from skimage import transform 
image_tran = transform.resize(image,(64,64,3)).reshape(64*64*3,1)#由于导入的照片不符合之前的训练集(规格为64*64*3),进行修改。
y = predict(result['w'],result['b'],image_tran)
if y == 1:
    print("我是猫")
else:
    print("不是猫")

总结:附上两张草稿,以免丢失。

学习视频:1、吴恩达的Deep learning 系列。
2、b站手把手讲解吴恩达老师作业的up。
感谢!
在这里插入图片描述
在这里插入图片描述

  • 25
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CSDN深度学习项目是一个开放平台,旨在为用户提供学习和应用深度学习相关技术的资源和社区。这个项目通过整合大量的深度学习教程、编程案例、学习资料和论坛讨论等,帮助用户更好地理解和应用深度学习领域的知识。 CSDN深度学习项目的主要特点是免费开放和多样化的内容。用户可以免费使用这个平台上提供的所有学习资源和工具,无论是初学者还是专业人士都可以通过这个平台进行深度学习的学习和实践。这个项目的内容非常丰富多样,涵盖了深度学习算法、框架和应用领域等各个方面。用户可以根据自己的需要选择学习的内容,并在学习过程中与其他用户一起交流和讨论,共同提高。 在CSDN深度学习项目中,用户可以找到很多深度学习的教程和案例。这些教程和案例详细介绍了深度学习的基本原理和常用技术,让用户可以迅速入门和理解深度学习的核心概念。同时,这些教程和案例还包括了一些实际应用的例子,帮助用户将所学知识应用到实际项目中。 除了教程和案例,CSDN深度学习项目还提供了丰富的学习资料和工具。用户可以通过这些资料深入了解深度学习领域的前沿技术和研究进展,了解深度学习在各个领域的应用。同时,用户还可以使用这些工具进行深度学习的实践和项目开发,运用自己所学的知识解决实际问题。 总之,CSDN深度学习项目是一个为用户提供深度学习学习和交流平台的项目,通过资源整合和社区互动,帮助用户更好地学习和应用深度学习技术,推动深度学习领域的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值