zoukankan      html  css  js  c++  java
  • tensorflow feature_column踩坑合集

    踩坑内容包含以下

    1. feature_column的输入输出类型,用一个数据集给出demo
    2. feature_column接estimator
    3. feature_column接Keras

    feature_column 输入输出类型

    输入输出类型

    feature_column输入可以是原始特征的列名,或者是feature_column。初上手感觉feature_column设计的有点奇怪,不过熟悉了逻辑后用起来还是很方便的。几个需要习惯一下的点:

    1. 深度模型的输入必须是Dense类型,所有输出是categorical类型需要经过indicator或者embedding的转换才可以
    2. 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,原始特征如下
    image.png-252.2kB

    输入-连续值

    image.png-170.8kB

    输入-离散值

    image.png-286.2kB

    输入-categorical

    image.png-290kB

    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
    
    

    持续更新中...

  • 相关阅读:
    Entity Framework开源了
    动态执行超过4000个字符的SQL
    微软针对Access提供了免费的SQL Server移植工具——SSMA
    网络采集库NCrawler
    使用WinSCP软件在windows和Linux中进行文件传输
    Open Source C# (Mono Compatible) Library for Sending Push Notifications To iOS (iPhone/iPad APNS), Android (C2DM), Windows Phone Apps
    Mono 2.11.3 发布包含微软的 Entity Framework
    谷歌发布 AngularJS 1.0,允许扩展HTML语法
    Accord.NET Framework
    CentOS源码编译安装Nginx和tcp_proxy module
  • 原文地址:https://www.cnblogs.com/gogoSandy/p/12435372.html
Copyright © 2011-2022 走看看