图片识别--逻辑回归

本文是我心情不好,随便写的,也懒的说那么多,直接上代码

#导入使用的库,这个数据什么的来自于吴恩达老师的课后习题
import numpy as np
import matplotlib.pyplot as plt
import h5py
from lr_utils import load_dataset

#导入数据
train_x, train_y, test_x, test_y, classes=load_dataset()

#sigmoid函数,没什么说的
def sigmoid(z):
    return 1/(1+np.exp(-z))

#这个是对数据的初始化,后面会提一提
def init(dim):
    train_x_flatten=train_x.reshape(train_x.shape[0],-1).T
    test_x_flatten=test_x.reshape(test_x.shape[0],-1).T
    w=np.zeros((dim,1))
    b=0
    assert(w.shape==(dim,1))
    return (w,b)

#这篇内容的核心,深度学习的前后传播
def propagate(w,b,x,y,m,a):
    global all_data
    J=0
    z=np.dot(w.T,x)+b
    A=sigmoid(z)
    all_data['cost_L'].append(-(y*np.log(A)+(1-y)*np.log(1-A)))
    dz=A-y
    dw=(1/m)*np.dot(x,dz.T)
    db=(1/m)*np.sum(dz)
    w=w-a*dw
    b=b-a*db
    return (w,b)
#预测函数,没什么技术含量
def predict(train_x_flatten,train_y,test_x_flatten,test_y,w,b,n):
    print('当前学习率:',learing)
    print('当迭代次数为:',itera)
    global all_data
    Y_prediction = np.zeros((1,train_y.shape[1])) 
    A=sigmoid(np.dot(w.T,train_x_flatten))
    A=A.reshape(1,-1)
    Sum=0
    for i in range(train_y.shape[1]):
        Y_prediction[0,i] = 1 if A[0,i] > 0.5 else 0
        Sum+=int(Y_prediction[0,i]==train_y[0,i])
    all_data['train_pre'].append(Sum/train_y.shape[1])
    print('训练模型准确率:',Sum/train_y.shape[1])
    A1=sigmoid(np.dot(w.T,test_x_flatten))
    A1=A1.reshape(1,-1)
    Y_prediction1 = np.zeros((1,test_y.shape[1])) 
    Sum1=0
    for i in range(test_y.shape[1]):
        Y_prediction1[0,i] = 1 if A1[0,i] > 0.5 else 0
        Sum1+=int(Y_prediction1[0,i]==train_y[0,i])
    print('训练模型准确率:',Sum1/test_y.shape[1])
    all_data['test_pre'].append(Sum1/test_y.shape[1])

#全部内容整合到一起,做得和那些模块类似
def model(train_x, train_y, test_x, test_y,n=10,a=0.01):
    train_x_flatten=train_x.reshape(train_x.shape[0],-1).T
    test_x_flatten=test_x.reshape(test_x.shape[0],-1).T
    dim=train_x_flatten.shape[0]
    w,b=init(dim)
    for i in range(n):
        w,b=propagate(w,b,train_x_flatten,train_y,dim,a)
    predict(train_x_flatten,train_y,test_x_flatten,test_y,w,b,n)
learning_rate=[0.1,0.01,0.001,0.0001]
iterable=[50,100,150,200,250,300]
all_data={'test_pre':[],'train_pre':[],'cost_L':[],'learning_rate':[],'iterable':[]}
for learing in learning_rate:
    for itera in iterable:
        all_data['learning_rate'].append(learing)
        all_data['iterable'].append(itera)
        model(train_x, train_y, test_x, test_y,itera,learing)

首先,我这代码运行没问题,但是只能作为参考,因为我菜。

sigmoid函数,按照公式来,没什么说的。。。
嗯,好像都是按照公式来,全都没得说的必要,就这样吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值