tensorflow feature_column踩坑合集
踩坑内容包含以下
- feature_column的输入输出类型,用一个数据集给出demo
- feature_column接estimator
- feature_column接Keras
feature_column 输入输出类型
输入输出类型
feature_column输入可以是原始特征的列名,或者是feature_column。初上手感觉feature_column设计的有点奇怪,不过熟悉了逻辑后用起来还是很方便的。几个需要习惯一下的点:
- 深度模型的输入必须是Dense类型,所有输出是categorical类型需要经过indicator或者embedding的转换才可以
- indicator, embedding, bucketized的输入不能是原始特征,前两者只能是categorical类型的feature_column, 后者只能是numeric_column
| feature_column | 输入 | 输出 | 输出是否为dense |
|---|---|---|---|
| categorical_column_with_identity | 数值型离散 | categorical | N |
| categorical_column_with_vocabulary_list | 字符型/数值型离散 | categorical | N |
| categorical_column_with_hash_bucket | 类别太多的离散值 | categorical | N |
| crossed_column | categorical/离散值 | categorical | N |
| indicator_column | categorical | one/multi-hot | Y |
| embedding_column | categorical | dense vector | Y |
| numeric_column | 数值型连续值 | numeric | Y |
| bucketzied_column | numeric_column | one-hot | Y |
以下给出各种特征工程的demo,原始特征如下

输入-连续值

输入-离散值

输入-categorical

feature_column接estimator
如果是使用预定义的estimator, feature_column可以直接作为输入,不需要任何额外操作,只需要注意深度模型只支持Dense类型的feature_column即可。
如果是自定义estimator,则需要多一步用feature_column先创建input_layer
input_layer = tf.feature_column.input_layer(features, feature_columns)
如果input_layer之后连接的是tf.layers,那直接进行操作即可,如果是进行自定义variable的各种操作,还有一个坑!因为上面input_layer的shape需要动态地赋给tf.get_vairable但tf.get_variable是不接受TensorShape作为shape输入的,所以以下代码会报错
input_dim = input.get_shape().as_list()[-1]
w = tf.get_variable('w', shape = [input_dim,1], dtype = tf.float32, validate_shape = False)
绕过的办法就是使用initializer, 因为initializer是可以动态定义shape的
input_dim = input.get_shape().as_list()[-1]
init = tf.random_normal( shape = (input_dim,1) )
w = tf.get_variable('w', dtype = tf.float32, initializer = init, validate_shape = False)
feature_column接keras
为什么要这么搭配呢,好像是没啥必要,只不过进一步证明tf的官方文档确实坑而已。。。
def model_fn():
#define Keras input
input = {}
for f in FEATURE_NAME:
input[f] = Input(shape=(1,), name = f, dtype = DTYPE[f])
#generate feature_columns
feature_columns = build_features()
#Define transformation from feature_columns to Dense Tensor
feature_layer = tf.keras.layers.DenseFeatures( feature_columns )
#Transform input
dense_feature = feature_layer(input)
output = Dense(1, activation='sigmoid')(dense_feature)
#feed input placeholder as list
model = Model(inputs = [i for i in input.values()], outputs = output)
return model
持续更新中...
tensorflow feature_column踩坑合集的更多相关文章
- better-scroll踩坑合集
better-scroll踩坑合集:https://www.jianshu.com/p/6338a8033281
- 小程序框架WePY 从入门到放弃踩坑合集
小程序框架WePY 从入门到放弃踩坑合集 一点点介绍WePY 因为小程序的语法设计略迷, 所以x1 模块化起来并不方便, 所以x2 各厂就出了不少的框架用以方便小程序的开发, 腾讯看到别人家都出了框架 ...
- tensorflow踩坑合集2. TF Serving & gRPC 踩坑
这一章我们借着之前的NER的模型聊聊tensorflow serving,以及gRPC调用要注意的点.以下代码为了方便理解做了简化,完整代码详见Github-ChineseNER ,里面提供了训练好的 ...
- 服务器端 CentOS 下配置 JDK 和 Tonmcat 踩坑合集
一.配置 JDK 时,在 /etc/profile 文件下配置环境变量,添加 #java environment export JAVA_HOME=/usr/java/jdk- export CL ...
- arm安装cuda9.0,tensorflow-gpu, jetson tx2安装Jetpack踩坑合集
因为要在arm(aarch64)架构的linux环境中安装tensorflow-gpu,但是官方tf网上没有对应的版本,所以我们找了好久,找到一个其他人编译好的tensorflow on arm的gi ...
- echarts统计图踩坑合集
1:折线图条的颜色修改 series : [ { name : 'SBP(收缩压)', type : 'line', itemStyle : { normal : { lineStyle:{ colo ...
- Nlog日志出坑合集
.net core框架下nlog不记录: 1.安装NLog.Web.AspNetCore 2.在Startup.cs文件的方法public void Configure(IApplicationBui ...
- AI相关 TensorFlow -卷积神经网络 踩坑日记之一
上次写完粗浅的BP算法 介绍 本来应该继续把 卷积神经网络算法写一下的 但是最近一直在踩 TensorFlow的坑.所以就先跳过算法介绍直接来应用场景,原谅我吧. TensorFlow 介绍 TF是g ...
- 人工智能(AI)库TensorFlow 踩坑日记之二
上次 踩坑日志之一 遗留的问题终于解决了,所以作者(也就是我)终于有脸出来写第二篇了. 首先还是贴上 卷积算法的示例代码地址 :https://github.com/tensorflow/models ...
随机推荐
- Java 网址短链接服务原理及解决方案
一.背景 现在在各种圈的产品各种推广地址,由于URL地址过长,不美观.不方便收藏.发布.传播以及各种发文字数限制等问题,微信.微博都在使用短链接技术.最近由于使用的三方的生成.解析短链接服务开始限制使 ...
- 创想变现:斯坦福设计创新课堂ME310分享(上篇)
编者按:今年6月,微软亚洲研究院人机交互组研究员顾嘉唯,在美国斯坦福大学担任了d-School的ME310设计课程的项目评审.该课程是斯坦福大学的全球联合新产品设计创新课程,学习方式以小组为单位,每个 ...
- SpringBoot 将自制的Starter 发布到远程公服
上一篇文章:就是简单的介绍了如何自己制作一个starter ,由于上篇文章只是我个人的笔记,就是将其中重要的部分写出来了,少了其他的基础步骤,但是这个我自己就能看懂,也算不上是一篇好的博客,只能算是笔 ...
- MySQL的详细操作
MySQL的详细操作 存储引擎 不同的数据应该有不同的处理机制 mysql存储引擎 Innodb:默认的存储引擎 查询速度较myisam慢 但是更安全,支持事务,行锁,外键由于以上的支持,数据更安全, ...
- 老版本loadrunner 打开侧边栏
- python之操作数据库
一.操作mysql 首先,python3操作mysql.需要安装第三方模块pymysql,在python2中则使用的是pysqldb.这里使用pymysql. 直接使用pip install pymy ...
- 牛客-小y的盒子
题目传送门 -------------------稍加观察就会发现,4n - 1就是题目要的答案.至于为什么,看官方的题解.不过这个n非常的大,用正常快速幂解决不了.这道题我学到的就是解决幂非常大的情 ...
- jQuery选择器的效率问题
jQuery提供了功能强大,并兼容多种css版本的选择器,不过发现很多同学在使用选择器时并未注重效率的问题. a) 尽量使用Id选择器,jQuery选择器使用的API都是基于getElementByI ...
- tomcat启动不了的问题
tomcat启动的几个问题 1.端口冲突 2.非端口冲突,需要加入配置host文件 日志文件: 解决办法:https://blog.csdn.net/u012949658/article/detail ...
- Linux那些事——GTK+, Qt, Gnome, KDE, xWindow, xOrg区别
Linux那些事--GTK+, Qt, Gnome, KDE, xWindow, xOrg区别 Linux不仅内核开源,系统配置也是高度可定制化的,其中就包括我们所熟知的图形界面,从桌面环境,主题,字 ...