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 ...
随机推荐
- 3)利用Build.php自动创建目录和文件
(1)首先做法参照: thinkphp5的手册的 命令行--->自动生成目录结构 或者看云的资料:https://www.kancloud.cn/manual/thinkphp5/118021 ...
- LeetCode No.127,128,129
No.127 LadderLength 单词接龙 题目 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵 ...
- git 首次提交
git init# 将本地仓库与码云远程仓库进行关联 git remote add origin git的url地址 git add . git commit -m "描述" # ...
- android记帐本、涂鸦、仿腾讯新闻、仿bilibili、Markdwon便签、资讯APP等源码
Android精选源码 kotlin版仿哔哩哔哩动画Android客户端源码 android实现图片涂鸦效果源码 Android 开源记账本项目源码 android高仿腾讯新闻app源码 androi ...
- 老版本loadrunner 打开侧边栏
- [LC] 58. Length of Last Word
Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...
- JSON — Java与JSON数据互转
转换时Bean所要求的: 被转换的Bean必需是public的. Bean被转换的属性一定要有对应的get方法,且一定要是public的. Bean中不能用引用自身的this的属性,否则运行时出现et ...
- HihoCode-1053-居民迁移
解法: 一开始不会做,看到标签说是贪心加二分忽然就会了,二分是分的是人口最多居住点的人口,检查人口最多的居住点人口为mid是否可行.贪心是如果从左往右循环就尽量把人口往左迁移,如果从右往左循环就尽量把 ...
- mysql挖掘与探索--表操作命令 1
1.登录数据库>mysql -u root -p 数据库名称 2.查询所有数据表>show tables; 3.查询表的字段信息>desc 表名称; 4.1添加表字段 alter t ...
- GCC与静态库、动态库
GCC 常用指令 1 man gcc gcc工作流程例如: gcc hello.c 1234567891011121314 //***第一步***gcc -E hello.c >hello.i ...