广播从矩阵创建的子张量(Theano)

2024-02-17

我想从矩阵创建两个子张量,使用索引选择相应的行。 一个子张量有几行,另一行只有一行,应该广播这些行以允许按元素添加。

我的问题是:如何表明我想要允许在给定索引的子张量中的特定维度上进行广播(subtensorRight在下面的例子中)?

这是显示我想要做什么的示例:

import theano
import numpy as np
import theano.tensor as T

def embedding_matrix(D, N, name):
    W_values = np.random.uniform(size=(D, N))
    return theano.shared(value=W_values, name=name)

rE = embedding_matrix(4, 5, "rE")
lis = T.ivector('lis')# [1,2]
subtensorLeft = rE[lis,:]
ri = T.ivector('ri')#[1]
subtensorRight = rE[ri,:]


def fnsim(left, right):
    return - T.sqrt(T.sum(T.sqr(left - right), axis=1))

distances_test = theano.function(
    inputs=[lis, ri],
    outputs=fnsim(subtensorLeft, subtensorRight)
)

print distances_test([1,2],[1])

它抛出这个错误:

ValueError: Input dimension mis-match. (input[0].shape[0] = 2, input[1].shape[0] = 1)
Apply node that caused the error: Elemwise{Composite{sqr((i0 - i1))}}[(0, 0)](AdvancedSubtensor1.0, AdvancedSubtensor1.0)
Toposort index: 2
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)]
Inputs shapes: [(2, 5), (1, 5)]
Inputs strides: [(40, 8), (40, 8)]
Inputs values: ['not shown', array([[ 0.39528934,  0.4414946 ,  0.36837258,  0.52523446,  0.35431748]])]
Outputs clients: [[Sum{axis=[1], acc_dtype=float64}(Elemwise{Composite{sqr((i0 - i1))}}[(0, 0)].0)]]

===

更新1:

它停止抱怨并在重塑时给出预期结果subtensorRight这边走:

subtensorRight = rE[ri,:]
subtensorRight = subtensorRight.reshape((1, subtensorRight.shape[1]))

问题:这是正确的方法吗?

更新2:

如果我尝试如下重塑(我认为这相当于上面的重塑),它就不起作用:

subtensorRight = rE[ri,:]
subtensorRight = subtensorRight.reshape(subtensorRight.shape)

错误是:

ValueError: Input dimension mis-match. (input[0].shape[0] = 2, input[1].shape[0] = 1)
Apply node that caused the error: Elemwise{Composite{sqr((i0 - i1))}}[(0, 0)](AdvancedSubtensor1.0, Reshape{2}.0)
Toposort index: 6
Inputs types: [TensorType(float64, matrix), TensorType(float64, matrix)]
Inputs shapes: [(2, 5), (1, 5)]
Inputs strides: [(40, 8), (40, 8)]
Inputs values: ['not shown', array([[ 0.54193252,  0.36793023,  0.89009085,  0.02487759,  0.95955664]])]
Outputs clients: [[Sum{axis=[1], acc_dtype=float64}(Elemwise{Composite{sqr((i0 - i1))}}[(0, 0)].0)]]

问题:为什么从子张量中取出维度 0 进行重塑会产生不同的结果?


问题是你的 theano 函数事先不知道正确的 (ri)索引将只有 1 个元素(因此众所周知,您将尝试从 MxD 矩阵中减去 NxD 矩阵,这通常不起作用。但是对于您的情况,您只需要 N=1 。)

解决方案是将正确的索引声明为标量。

我相信以下代码可以满足您的要求:

import theano
import numpy as np
import theano.tensor as T

def embedding_matrix(D, N, name):
    W_values = np.random.uniform(size=(D, N))
    return theano.shared(value=W_values, name=name)

rE = embedding_matrix(4, 5, "rE")
lis = T.ivector('lis')# [1,2]
subtensorLeft = rE[lis,:]
ri = T.iscalar('ri')  # Instead of: ri = T.ivector('ri')
subtensorRight = rE[ri,:]


def fnsim(left, right):
    return - T.sqrt(T.sum(T.sqr(left - right), axis=1))

distances_test = theano.function(
    inputs=[lis, ri],
    outputs=fnsim(subtensorLeft, subtensorRight)
)

print distances_test([1,2],1)  # Instead of: distances_test([1,2],[1])

(输出[-0. -1.01565315])

无耻的自我推销:

您可以使用Plato https://github.com/petered/plato库使 theano 代码更具可读性。在你的情况下:

from plato.core import symbolic
import numpy as np
import theano.tensor as T

@symbolic
def distances_test(matrix, test_rows, reference_row):
    left = matrix[test_rows]
    right = matrix[reference_row]
    return - T.sqrt(T.sum(T.sqr(left - right), axis=1))

f = distances_test.compile()

print f(np.random.uniform(size=(4, 5)), np.array([1,2]), 1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

广播从矩阵创建的子张量(Theano) 的相关文章

  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • 如何用python脚本控制TP LINK路由器

    我想知道是否有一个工具可以让我连接到路由器并关闭它 然后从 python 脚本重新启动它 我知道如果我写 import os os system ssh l root 192 168 2 1 我可以通过 python 连接到我的路由器 但是
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • Pandas 将多行列数据帧转换为单行多列数据帧

    我的数据框如下 code df Car measurements Before After amb temp 30 268212 26 627491 engine temp 41 812730 39 254255 engine eff 15
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

  • Redis pub sub 最大订阅者和发布者

    谁能告诉我 Redis pub sub 可以支持的最大并发通道数是多少 订阅者和发布者的数量是否有上限 Redis 使用一个dict 与键相同的结构 用于存储每个客户端和所有客户端的频道订阅 保留每个订阅的哈希值以及订阅的客户端列表 因此总
  • 使用 libblkid 查找分区的 UUID

    我在看libblkid http ftp kernel org pub linux utils util linux ng libblkid docs index html并对文档感到困惑 有人能给我提供一个示例 说明如何使用这个库找到 L
  • SQL Server 表审计触发器

    我有两张桌子Customers and AuditTable 当我修改Customers表中 我需要插入一条新记录AuditTable CREATE TABLE dbo AuditTable Id int IDENTITY 1 1 NOT
  • 页内搜索使用 contains() 显示/隐藏 div 内容

    我正在尝试向我的常见问题解答页面添加搜索功能 但我完全陷入困境 我想要的是一个文本框 用户在其中输入关键字 或单词 该文本框为关键字运行 jquery 并为所有相关答案设置 display block 到目前为止我所拥有的是这样的
  • 在 jQuery 中选择前 N 个兄弟?

    我正在尝试设置 jQuery 选择器 但我不太确定需要如何编写它 我有一个无序列表 看起来像这样 ul li something li li something li li something li li something li li c
  • UserManager.AddToRole 不起作用 - 外键错误

    在我的 ASP NET MVC 应用程序中 我有一些代码应该相当简单 UserManager AddToRole user id Admin 我刚刚收到这个错误 INSERT 语句与 FOREIGN KEY 约束冲突 FK dbo AspN
  • python 从堆中创建所有内容?

    在 C C 中 当您在函数内创建局部变量时 堆栈中会有变量 http effbot org zone call by object htm http effbot org zone call by object htm CLU 对象独立于过
  • 提交联系表 7 后创建 Woocommerce 产品

    我有 联系表 7 表格 并且在附近的范围内有一个 btQuoteTotalCalc 类的号码 提交此联系表单后 我使用 JavaScript 捕获号码 然后使用该号码作为价格创建 woocommerce 产品 并将用户重定向到结账页面 我正
  • 如何在 Highcharts / Highstock 中获取系列的 id

    如何获取系列的 id 在里面API http api highcharts com highstock Series只有名称和数据等 但没有 ID 我怎样才能从系列中获取id 我使用以下方法循环图表中的所有系列 chart series e
  • 查找过去 30 天内分配给 X 的工作项

    我正在尝试查找过去 30 天内分配给人员 X 的所有工作项 我遇到的大问题是 过去 30 天 部分 我考虑过使用 ever 或 asof 关键字 但还找不到一个好的答案 类似WHERE Assigned To X AND Assigned
  • WHERE 子句中的 CASE WHEN 因缺少关键字错误而失败

    在oracle中 我尝试使用日期作为where子句中的条件 我正在寻找的是 如果员工是在 2020 年 5 月 7 日之后创建的 则不要使用条件 XML VAL NOT LIKE 但如果他们是在 2020 年 5 月 7 日之前创建的 则无
  • 如何处理 NSCollectionView 中的按钮单击

    我有一个NSCollectionView OS X 不是 iOS 绑定到我的模型 每个集合视图项目都有一个按钮和一个标签 我正在处理点击操作 并且我有sender and event争论 但我无法区分一个按钮和其他按钮 大多数不涉及集合视图
  • wpf VisualState 与 wpfToolkit 冲突?

    我正在 VS2010 中构建一个应用程序 使用 wpfToolkit 3 5 作为引用程序集 我尝试从 Expression Blend 4 添加一些 VisualStates 但在尝试构建项目时收到以下错误 类型 System Windo
  • 如何在 Flink 中引用外部 Jar

    每个人 我尝试在所有任务管理器中以将其复制到 FLINK lib 的方式在 Flink 中引用我的公司 jar 但失败了 而且我不想打包一个胖罐子 太重而且浪费时间 我认为第一种方法也不是一个好主意 因为我必须管理整个集群中的jar 有谁知
  • 将(垂直)UIPageViewController 嵌套在另一个(水平)UIPageViewcontroller 中

    我的问题很大UIPageViewController 我想使用部分和子部分在我的应用程序中呈现内容 所以 我创建了 two 的实例UIPageViewController 水平 红色 和垂直 蓝色 早些时候我说过我创建了 两个 实例 这并不
  • 哪种方法更好地从数据库检索数据

    我对选择两种方法感到困惑 Scenario有两张桌子Table 1 and Table 2分别 Table 1包含用户的数据 例如名字 姓氏等 Table 2包含每个用户拥有的汽车及其描述 IEColor Registration No e
  • 将数据子集到 R 中第一次出现的位置

    我正在尝试对数据进行子集化 以便它只保留变量的第一次出现 我正在查看追踪工人职业生涯的面板数据 并尝试对数据进行子集化 以便它只显示直到每个人成为老板 id year name job job2 1 1990 Bon Manager 0 1
  • sql server 2008 用户“NT AUTHORITY\NETWORK SERVICE”登录失败

    我正在尝试使用 net Framework 4 将我的网站连接到 Windows Server 2003 上的 sql server 2008 r2 这是连接字符串
  • AngularJS如何使用浏览器语言检测?

    您好 我使用 http get 从数据库获取文本 如何通过浏览器检测获取文本 如何使用if子句 我不想使用translate toogle var mainCtrl function scope http sce location time
  • 广播从矩阵创建的子张量(Theano)

    我想从矩阵创建两个子张量 使用索引选择相应的行 一个子张量有几行 另一行只有一行 应该广播这些行以允许按元素添加 我的问题是 如何表明我想要允许在给定索引的子张量中的特定维度上进行广播 subtensorRight在下面的例子中 这是显示我