假如说,你再处理文本的时候,写tfrecord的时候用的变长的类型,

example = tf.train.Example(features=tf.train.Features(feature={
'feats': _int64_feature(query_feats)
}))

那么读的时候会用到

features = tf.parse_single_example(
serialized_example,
features={
'feats': tf.VarLenFeature(tf.int64)
})
feats=features['feats']
return feats

这个东西返回值会是一个sparse_tensor,那么在embding_lookup的时候需要用到sparse的函数:

tf.nn.embedding_lookup_sparse(emb,feats, None, combiner="sum")

这在你用tfrecord的时候不会有什么问题,因为tensorflow会自动给你转换成sparse_tensor从而进行embding_lookup_sparse。

但是当你需要feed_dict进行测试的时候,非常不方便:

加入图是这么定义的:

sp_t=tf.sparse_placeholder(tf.int64)

res =tf.nn.embedding_lookup_sparse(emb,sp_t, None, combiner="sum")

举个简单的例子,比如我的矩阵是[1,2]

那么你feed_dict的时候需要:

sess.run(res,feed_dict={sp_t:tf.SparseTensorValue([[0,1], [0,2]], [1, 2], [1, 3]) })

你看多麻烦,你是需要把你的稀疏矩阵的格式转化成SparseTensorValue的格式,

所以呢,我看了一部分人是这么搞的,

1,在生成tfrecord的进行padding,所有处理都当成dense来处理。这样的缺点是tfrecord占用空间比较大

2,在读取到sparse tensor之后使用sparse_to_dense函数转成dense,build graph的时候用dense的来build,这样feed的时候也用可以直接输入的dense的矩阵。注意(sparse_to_dense可以指定padding的长度,sparse_tensor_to_dense会padding到自身最大的长度,如果是每个batch sequence长度不一样的话,用sparse_tensor_to_dense)

参考:

http://stackoverflow.com/questions/41105751/feeding-tensorflow-sparse-matrix-for-sparse-dense-multiplication-getting-the-fo

sparse_tensor feed_dict的时候十分不方便。的更多相关文章

  1. TF:TF定义两个变量相乘之placeholder先hold类似变量+feed_dict最后外界传入值—Jason niu

    #TF:TF定义两个变量相乘之placeholder先hold类似变量+feed_dict最后外界传入值 import tensorflow as tf input1 = tf.placeholder ...

  2. sess.run() 中的fetches和feed_dict

    sess.run()由fetches和feed_dict组成 sess.run(fetches,feed_dict) sess.run是让fetches节点动起来,告诉tensorflow,想要此节点 ...

  3. TensorFlow学习笔记(三)-- feed_dict 使用

    个人理解:就是TF的一种输入语法. 跟C语言的scanf(),C++的 cin>> 意思差不多,只是长相奇怪了点而已. 做完下面几个例子,基本也就适应了. 首先占位符申请空间:使用的时候, ...

  4. 记录:tensoflow改错TypeError: Cannot interpret feed_dict key as Tensor: Can not convert a float into a Te

    错误描述: TypeError: Cannot interpret feed_dict key as Tensor: Can not convert a float into a Tensor. 改错 ...

  5. TensorFlow学习笔记3——Placeholders and feed_dict

    1. Placeholders placeholders,顾名思义,就是占位的意思,举个例子:我们定义了一个关于x,y的函数 f(x,y)=2x+y,但是我们并不知道x,y的值,那么x,y就是等待确定 ...

  6. Tensorflow学习笔记——占位符和feed_dict(二)

    创建了各种形式的常量和变量后,但TensorFlow 同样还支持占位符.占位符并没有初始值,它只会分配必要的内存.在会话中,占位符可以使用 feed_dict 馈送数据. feed_dict是一个字典 ...

  7. tensorflow feed_dict()

    import tensorflow as tf a=tf.Variable(100) b=tf.Variable(200) c=tf.Variable(300) update1=tf.assign(c ...

  8. Tensorflow二分类处理dense或者sparse(文本分类)的输入数据

    这里做了一些小的修改,感谢谷歌rd的帮助,使得能够统一处理dense的数据,或者类似文本分类这样sparse的输入数据.后续会做进一步学习优化,比如如何多线程处理. 具体如何处理sparse 主要是使 ...

  9. 卷积神经网络提取特征并用于SVM

    模式识别课程的一次作业.其目标是对UCI的手写数字数据集进行识别,样本数量大约是1600个.图片大小为16x16.要求必须使用SVM作为二分类的分类器. 本文重点是如何使用卷积神经网络(CNN)来提取 ...

随机推荐

  1. debian使用nginx创建静态文件存储

    vim /etc/nginx/sites-available/default 在server下添加 location ~ .*\.(gif|jpg|jpeg|png)$ { expires 24h; ...

  2. websocket作用

    1.即时通讯 web即时通讯(网页的QQ,聊天系统等)可以通过websocket实现. 2.轮询 web开发中,有时需要通过轮询(比如时间间隔5秒)去服务器读取数据. 使用HTTP协议向服务器发送re ...

  3. Jmeter学习之-获取登录的oken值(1)

    ps: 这里只着重讲述如何实时获取其他接口返回的值,作为此次接口的参数传递,添加接口请求的相关不再详述,可查看上一篇文章 为了方便管理,此处将:登录接口单独放在一个线程组下面,需要使用登录接口返回的t ...

  4. bugfree3.0.1-修改“优先级”为中文引起的PHP Error

    博主在搭建好bugfree后,修改了系统中“优先级”字段,将原先系统定义的优先级“1.2.3.4”修改为符合博主自己项目要求的优先级“高.中.低”.修改成功后,系统确实将原先提交的BUG优先级从“1. ...

  5. Spark共享变量(广播变量、累加器)

    转载自:https://blog.csdn.net/Android_xue/article/details/79780463 Spark两种共享变量:广播变量(broadcast variable)与 ...

  6. OAuth2认证和授权:AuthorizationCode认证

    前面的OAuth2认证,里面的授权服务器都是用的identityserver4搭建的 ids4没有之前一般都是Owin搭建授权服务器,博客园有很多 ids4出来后,一般都是用ids4来做认证和授权了, ...

  7. Python3.0以上版本在对比图片相似中的应用

    首先声明一下,代码是从网上找到的,只是本人作以简单的修改. 请大家尊重原创. 我本地用到的是 Python 3.4   以及 Pillow (4.0.0)  第三方包. 方法一. #!/usr/bin ...

  8. 论文阅读(XiangBai——【AAAI2017】TextBoxes_A Fast Text Detector with a Single Deep Neural Network)

    XiangBai——[AAAI2017]TextBoxes:A Fast Text Detector with a Single Deep Neural Network 目录 作者和相关链接 方法概括 ...

  9. 第二篇——Struts2的Action搜索顺序

    Struts2的Action的搜索顺序: 地址:http://localhost:8080/path1/path2/student.action     1.判断package是否存在,例如:/pat ...

  10. C#窗体程序与sql sever 数据库链接

    一.所用工具 Visual Studio 2017和SQL Server Management Studio 2012 二.连接 打开SQL Server Management Studio 2012 ...