cbow模型详解_drude模型的三个基本假设

cbow模型详解_drude模型的三个基本假设初始化:初始化方法的参数包括词汇个数vocab_size和中间层的神经元个数hidden_size。首先生成两个权重(W_in和W_out),并用一些小的随机值初始化这两个权重。设置astype(‘f’),初始化将使用32位的浮点数。生成层:生成两个输入侧的MatMul层、一个输出侧的MatMul层,以及一个SoftmaxwithLoss层。保存权重和梯度:将该神经网络中使用的权重参数和梯度分别保存在列表类型的成员变量params和grads中。正向传播for.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在这里插入图片描述

初始化:初始化方法的参数包括词汇个数 vocab_size 和中间层的神经元个数 hidden_size。首先生成两个权重(W_in 和 W_out),并用一些小的随机值初始化这两个权重。设置astype(‘f’),初始化将使用 32 位的浮点数。

生成层:生成两个输入侧的 MatMul 层、一个输出侧的 MatMul 层,以及一个 Softmax with Loss 层。

保存权重和梯度:将该神经网络中使用的权重参数和梯度分别保存在列表类型的成员变量 params 和 grads 中。

正向传播 forward() 函数:该函数接收参数 contexts 和 target,并返回损失(loss)。这两个参数结构如下。

在这里插入图片描述

contexts 是一个三维 NumPy 数组,第 0 维的元素个数是 mini-batch 的数量,第 1 维的元素个数是上下文的窗口大小,第 2 维表示 one-hot 向量。下面这个代码取出来的是什么?

 h0 = self.in_layer0.forward(contexts[:, 0])
 h1 = self.in_layer1.forward(contexts[:, 1])

jym做了一个测试:

import sys
sys.path.append('..')
from common.util import preprocess #, create_co_matrix, most_similar
from common.util import create_contexts_target, convert_one_hot

text = 'You say goodbye and I say hello.'
corpus, word_to_id, id_to_word = preprocess(text)
contexts, target = create_contexts_target(corpus, window_size=1)
#print(contexts)
#print(target)
vocab_size = len(word_to_id)
target = convert_one_hot(target, vocab_size)
contexts = convert_one_hot(contexts, vocab_size)
print(contexts[:, 0])

输出:然后从输出就知道了,取的是不同target的左边的单词。

[[1 0 0 0 0 0 0]
 [0 1 0 0 0 0 0]
 [0 0 1 0 0 0 0]
 [0 0 0 1 0 0 0]
 [0 0 0 0 1 0 0]
 [0 1 0 0 0 0 0]]

反向传播 backward():神经网络的反向传播在与正向传播相反的方向上传播梯度。这个反向传播从 1 出发,并将其传向 Softmax with Loss 层。然后,将 Softmax with Loss 层的反向传播的输出 ds 传到输出侧的 MatMul 层。“×”的反向传播将正向传播时的输入值“交换”后乘以梯度。“+”的反向传播将梯度“原样”传播。

在这里插入图片描述

这个backward函数里面调用的是之前写好的层的反向传播函数,比如loss_layer.backward(dout),因此backward函数用完之后,各个权重参数的梯度就保存在了成员变量 grads 中(这是之前写的层里面的反向传播函数来实现的)。先调用 forward() 函数,再调用 backward() 函数,grads 列表中的梯度被更新。

import sys
sys.path.append('..')
import numpy as np
from common.layers import MatMul, SoftmaxWithLoss


class SimpleCBOW:
    def __init__(self, vocab_size, hidden_size):
        V, H = vocab_size, hidden_size

        # 初始化权重
        W_in = 0.01 * np.random.randn(V, H).astype('f')
        W_out = 0.01 * np.random.randn(H, V).astype('f')

        # 生成层
        self.in_layer0 = MatMul(W_in)
        self.in_layer1 = MatMul(W_in)
        self.out_layer = MatMul(W_out)
        self.loss_layer = SoftmaxWithLoss()

        # 将所有的权重和梯度整理到列表中
        layers = [self.in_layer0, self.in_layer1, self.out_layer]
        self.params, self.grads = [], []
        for layer in layers:
            self.params += layer.params
            self.grads += layer.grads

        # 将单词的分布式表示设置为成员变量
        self.word_vecs = W_in

    def forward(self, contexts, target):
        h0 = self.in_layer0.forward(contexts[:, 0])
        h1 = self.in_layer1.forward(contexts[:, 1])
        h = (h0 + h1) * 0.5
        score = self.out_layer.forward(h)
        loss = self.loss_layer.forward(score, target)
        return loss

    def backward(self, dout=1):
        ds = self.loss_layer.backward(dout)
        da = self.out_layer.backward(ds)
        da *= 0.5
        self.in_layer1.backward(da)
        self.in_layer0.backward(da)
        return None
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196424.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java设计模式之行为型:备忘录模式

    Java设计模式之行为型:备忘录模式

    2021年10月4日
    40
  • 无损压缩视频文件_什么软件可以无损传输视频

    无损压缩视频文件_什么软件可以无损传输视频面对一些海量的高清视频的存储,一个好的高清无损视频压缩解决方案可以为整个项目本身省掉不少费用,常常有用户在苦苦寻找怎么在不损画质的情况下压缩视频。而近期航天安网接到青岛市视频压缩的需求一起来看案例吧!项目背景:为保障青岛上合峰会顺利进行,某央企公司青岛分部要求所有业务网点视频监控系统进行存储升级改造,采集的视频图像信息保存期限不得少于九十日。项目需求:某央企公司青岛分部提出了实时视频无损压缩、延时90天存储、总部调看不卡顿三项需求。方案设计:了解了青岛市各个业务网点的基础网络情况,提出了基于VD

    2022年10月3日
    0
  • Kaptcha 验证码框架使用

    Kaptcha 验证码框架使用基于springboot验证码框架kaptcha使用一、统一步骤引入maven坐标<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId>…

    2022年6月18日
    53
  • mongovue mysql_mongo客户端mongoVUE的使用「建议收藏」

    mongovue mysql_mongo客户端mongoVUE的使用「建议收藏」一、先创建一张mongo表,右击已创建的数据库test,点击addcollection..输入CollectionName,点击ok;二、在创建的表中新增列与数据,右击表选择Insertdocument点击Insert,刷新表。三、查询数据右击表格,点击Find1、查询日期的方式需要在{Find}框中写{“endDate”:ISODate(“2013-12-30T16:00:00Z”)}这样才…

    2022年8月21日
    3
  • 车载以太网之 DHCP协议「建议收藏」

    车载以太网之 DHCP协议「建议收藏」车载以太网与传统以太网的主要区别在于二者的物理层,前者的物理层采用一对双绞线的100BASE-T1,而后者的物理层采用两对双绞线的方式,比如100BASE-TX。而二层以上的协议栈,车载网络则基本借鉴传统网络,区别并不大。下图是基于车载以太网的车载网络所使用的各种通信协议,在这篇文章中我将简要介绍一下位于7层上的DHCP协议。车载以太网涉包含的各种协议DHCP的全称是DynamicHostConfigurationProtocol,翻译作动态主机配置协议。它的用途是为网络节点自动配置I

    2022年5月23日
    116
  • 接口测试题目_jmeter接口自动化测试框架

    接口测试题目_jmeter接口自动化测试框架http接口工具有很多如:postman、jmeter、soupUI、Java+httpclient、robotframework+httplibrary、Fidder+postman等1、什么是接口接口就是内部模块对模块,外部系统对其他服务提供的一种可调用或者连接的能力的标准接口的种类和分类:webservice和httpapi接口1)webservice接口是走soap协议通过htt…

    2022年9月27日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号