sparse_tensor feed_dict的时候十分不方便。
假如说,你再处理文本的时候,写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的时候十分不方便。的更多相关文章
- TF:TF定义两个变量相乘之placeholder先hold类似变量+feed_dict最后外界传入值—Jason niu
#TF:TF定义两个变量相乘之placeholder先hold类似变量+feed_dict最后外界传入值 import tensorflow as tf input1 = tf.placeholder ...
- sess.run() 中的fetches和feed_dict
sess.run()由fetches和feed_dict组成 sess.run(fetches,feed_dict) sess.run是让fetches节点动起来,告诉tensorflow,想要此节点 ...
- TensorFlow学习笔记(三)-- feed_dict 使用
个人理解:就是TF的一种输入语法. 跟C语言的scanf(),C++的 cin>> 意思差不多,只是长相奇怪了点而已. 做完下面几个例子,基本也就适应了. 首先占位符申请空间:使用的时候, ...
- 记录: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. 改错 ...
- TensorFlow学习笔记3——Placeholders and feed_dict
1. Placeholders placeholders,顾名思义,就是占位的意思,举个例子:我们定义了一个关于x,y的函数 f(x,y)=2x+y,但是我们并不知道x,y的值,那么x,y就是等待确定 ...
- Tensorflow学习笔记——占位符和feed_dict(二)
创建了各种形式的常量和变量后,但TensorFlow 同样还支持占位符.占位符并没有初始值,它只会分配必要的内存.在会话中,占位符可以使用 feed_dict 馈送数据. feed_dict是一个字典 ...
- tensorflow feed_dict()
import tensorflow as tf a=tf.Variable(100) b=tf.Variable(200) c=tf.Variable(300) update1=tf.assign(c ...
- Tensorflow二分类处理dense或者sparse(文本分类)的输入数据
这里做了一些小的修改,感谢谷歌rd的帮助,使得能够统一处理dense的数据,或者类似文本分类这样sparse的输入数据.后续会做进一步学习优化,比如如何多线程处理. 具体如何处理sparse 主要是使 ...
- 卷积神经网络提取特征并用于SVM
模式识别课程的一次作业.其目标是对UCI的手写数字数据集进行识别,样本数量大约是1600个.图片大小为16x16.要求必须使用SVM作为二分类的分类器. 本文重点是如何使用卷积神经网络(CNN)来提取 ...
随机推荐
- Centos7.1环境下搭建SVN
环境准备: 系统 配置 IP Centos7.1 1核2G+60GB硬盘 10.10.28.204 1.安装 sudo yum install subversion 查看版本 svnserve –-v ...
- Django中CBV源码解析
使用 关于FBV和CBV的使用在之前有提到,点击穿越. 准备 首先在视图中创建一个类并继承 django.views.View 类,在类中可定义各种请求方式对应执行的函数(函数名为请求方式名称小写). ...
- React之ant design的table表格序号连续自增
render(text,record,index){ return( <span>{(pagination.current-1)*10+index+1}</spa ...
- python selenium webdriver入门基本操作
python selenium webdriver入门基本操作 未经作者允许,禁止转载! from selenium import webdriver import time driver=webdr ...
- tplink路由器DMZ设置
设置完成后,DMZ主机访问不了? 请排查以下方面: 1.确认服务器搭建成功,即内网可以正常访问: 2.确认在DMZ主机中填写的服务器IP地址正确: 3.宽带直接连接服务器并配置上网,确认外网可以正常访 ...
- input[type = 'date']标签。
1.首先调用浏览器自带时间控件,input的type属性有以下几种写法: type=’date’ //显示年.月.日 type=‘month’//显示年.月 type=‘week’//显示年.周 ty ...
- IO流的总结(一)
IO流的介绍: 其实在我们现实生活中有很多流,例如:水流,电流,气流 等等都是是流,但在Java中IO流是指对数据的操作的流. 按照流的分类: 1:字节流和字符流 Reader和InputStrea ...
- windows程序设计 加载位图图片
现在网上随便下个jpg图片,用windows自带的画图工具打开,点击画图工具左上角,文件->另存为->选择bmp,点击保存,保存好后,就得到一张位图了. 得到的位图,位图的内存比原图片jp ...
- 小程序canvas生成海报保存至手机相册
小程序canvas画图保存至手机相册 (1)可直接展示生成的海报 .因手机分辨率不同可能导致生成的海报会有细微差别,这里隐藏canvas海报,页面正常设置海报样式保存时保存隐藏的canvas海报 (2 ...
- C#串口通信遇到的坑
C#串口通信中有一个DataReceived事件可以委托一个接收函数.此接收函数是运行在辅线程(secondary thread)上的.如果要在这个函数中修改主线程中的一些元素,比如UI界面上的变量的 ...