sgd Momentum Vanilla SGD RMSprop adam等优化算法在寻找 简单logistic分类中的 的应用

本文主要是介绍sgd Momentum Vanilla SGD RMSprop adam等优化算法在寻找 简单logistic分类中的 的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考博文





​​​​​​(4条消息) sgd Momentum Vanilla SGD RMSprop adam等优化算法在寻找函数最值的应用_tcuuuqladvvmm454的博客-CSDN博客

在这里随机选择一些数据 生成两类

 

 

 

 

核心代码如下:
    def __init__(self, loss, weights, lr=2.1, beta1=0.9, beta2=0.999, epislon=1e-8):# , t1=[], g1=[], lr1=[], m1=[], v1=[], theta1=[]):
        self.loss = loss
        self.theta = weights
        self.lr = lr
        self.beta1 = beta1
        self.beta2 = beta2
        self.epislon = epislon
        self.get_gradient = grad(loss)
        self.m = 0
        self.v = 0
        self.t = 0
        #t1=[], g1=[], lr1=[], m1=[], v1=[], theta1=[]
        #self.t1, g1, lr1, self.m1, self.v1, self.theta1=[],[],[],[],[],[]

    def minimize_raw(self, epochs=EPOCHS):##sgd
        ee=[]
        #print('sgd------------')
        for _ in range(epochs):
            self.t += 1
            #print('adma------------')
            g = self.get_gradient(self.theta)
            self.m = self.beta1 * self.m + (1 - self.beta1) * g
            self.v = self.beta2 * self.v + (1 - self.beta2) * (g * g)
            self.m_cat = self.m / (1 - self.beta1 ** self.t)
            self.v_cat = self.v / (1 - self.beta2 ** self.t)
            self.theta -= self.lr * self.m_cat / (self.v_cat ** 0.5 + self.epislon)
            final_loss = self.loss(self.theta)
            ee.append(final_loss)
        plt.figure()
        plt.plot(ee)
        plt.show()
        print("adam_final loss:{} weights0:{}".format(final_loss, self.theta[0]))
    def minimize_raw1(self, epochs=EPOCHS):##sgd
        ee=[]
        #print('sgd------------')
        for _ in range(epochs):
            self.t += 1
            g = self.get_gradient(self.theta)
            self.m = self.beta1 * self.m + (1 - self.beta1) * g
            self.v = self.beta2 * self.v + (1 - self.beta2) * (g * g)
            self.m_cat = self.m / (1 - self.beta1 ** self.t)
            self.v_cat = self.v / (1 - self.beta2 ** self.t)
            self.theta -= self.lr * g#self.m_cat / (self.v_cat ** 0.5 + self.epislon)
            final_loss = self.loss(self.theta)
            ee.append(final_loss)
        plt.figure()
        plt.plot(ee)
        plt.show()
        print("sgd_final loss:{} weights0:{}".format(final_loss, self.theta[0]))

    def minimize(self, epochs=EPOCHS):
        ee=[]
        for _ in range(epochs):
            
            self.t += 1
            g = self.get_gradient(self.theta)
            lr = self.lr * (1 - self.beta2 ** self.t) ** 0.5 / (1 - self.beta1 ** self.t)
            self.m = self.beta1 * self.m + (1 - self.beta1) * g
            self.v = self.beta2 * self.v + (1 - self.beta2) * (g * g)
            self.theta -= lr * self.m / (self.v ** 0.5 + self.epislon)
            final_loss = self.loss(self.theta)
            ee.append(final_loss)
        plt.figure()
        plt.plot(ee)
        plt.show()
        print("romsrop_final loss:{} weights0:{}".format(final_loss, self.theta[0]))
    def minimize2(self, epochs=EPOCHS):
        ee=[]
        for _ in range(epochs):
            self.t += 1
            g = self.get_gradient(self.theta)
            lr = self.lr * (1 - self.beta2 ** self.t) ** 0.5 / (1 - self.beta1 ** self.t)
            self.m = self.beta1 * self.m + lr * g
            #self.v = self.beta2 * self.v + (1 - self.beta2) * (g * g)
            self.theta -= self.m# / (self.v ** 0.5 + self.epislon)
            final_loss = self.loss(self.theta)
            ee.append(final_loss)
        plt.figure()
        plt.plot(ee)
        plt.show()
        print("dongliang_final loss:{} weights0:{}".format(final_loss, self.theta[0]))
        

    #t1, g1, lr1, m1, v1, theta1=[],[],[],[],[],[]
    def minimize_show(self, epochs=EPOCHS):
        lr1=[0.1,0.3,0.0001]
        for uu in range(3):
            for _ in range(epochs):
                self.t += 1
                lr=lr1[uu]
                g = self.get_gradient(self.theta)
                lr = self.lr * (1 - self.beta2 ** self.t) ** 0.5 / (1 - self.beta1 ** self.t)
                self.m = self.beta1 * self.m + (1 - self.beta1) * g
                self.v = self.beta2 * self.v + (1 - self.beta2) * (g * g)
                self.theta -= lr * self.m / (self.v ** 0.5 + self.epislon)
                #print("step{: 4d} g:{} lr:{} m:{} v:{} theta:{}".format(self.t, g, lr, self.m, self.v, self.theta))
                #t1.append(self.t) 
                #g1.append(g),
                #l.r1append(l.r) 
                #m1.append(self.m)
                #v1.append(self.v) 
                #theta1.append(self.theta)#=[],[],[],[],[],[]
            #return self.t1, g1, lr1, self.m1, self.v1, self.theta1

            final_loss = self.loss(self.theta)
        print("final loss:{} weights:{}".format(final_loss, self.theta))


def sigmoid(x):
    
    
    return 1/(np.exp(-x) + 1)#0.5*(np.tanh(x) + 1)

def plot_sigmoid_dao( ):
    x=np.arange(-8,8,0.1)
    y=sigmoid(x)*(1-sigmoid(x))
    y1=sigmoid(x)#*(1-sigmoid(x))
    p1=plt.plot(x,y,label='sigmod1 ')
    p2=plt.plot(x,y1,label='sigmod')
    plt.legend( )#[p2, p1], ["yuanshi2", "daosgu 1"], loc='upper left')
    plt.show()
    
    #plt.legend('daoshu','yuanshi')
plot_sigmoid_dao()  
    
def logistic_predictions(weights, inputs):
    # Outputs probability of a label being true according to logistic model.
    return sigmoid(np.dot(inputs, weights))

def training_loss1(weights):
    rr=[]
    # Training loss is the negative log-likelihood of the training labels.
    preds = logistic_predictions(weights, inputs)
    rr.append((preds))
    #print(rr)
    label_probabilities = (preds - targets)**2#preds * targets + (1 - preds) * (1 - targets)
   
    #return -np.sum(np.log(label_probabilities))
    return np.sum((label_probabilities))/preds.shape[0]

def training_loss(weights):
    rr=[]
    s1=np.dot(inputs, weights)
    s2=sigmoid(s1)
    #print('s2=',s2)
    # Training loss is the negative log-likelihood of the training labels.
    preds = s2#logistic_predictions(weights, inputs)
    rr.append((preds))
    #print(preds ,targets)
    ee=[]
    for i in range(preds.shape[0]):
        ee.append((preds[i]-targets[i])**2)
    ee1=sum(ee)
        
    #label_probabilities = (preds - targets)**2#preds * targets + (1 - preds) * (1 - targets)
    #print(label_probabilities)
    #return -np.sum(np.log(label_probabilities))
    return ee1#np.sum((label_probabilities))

这篇关于sgd Momentum Vanilla SGD RMSprop adam等优化算法在寻找 简单logistic分类中的 的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/828817

相关文章

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex