• fully_connected与linear


    1、tf.contrib.layers.fully_connected与tf.contrib.layers.linear的区别

    tf.contrib.layers.fully_connected与tf.contrib.layers.linear实现一致,使用tf.contrib.layers.fully_connected一般将激活函数选项至None,因为线性变换不需要非线性变换,与此同时,tf.contrib.layers.fully_connected可以加上bias和正则项。

    2、tf.contrib.layers.fully_connected简介与实例

    fully_connected创建一个名为的变量weights,表示一个完全连接的权重矩阵,乘以它inputs产生一个 Tensor隐藏单位。如果normalizer_fn提供了数据(例如 batch_norm),则应用它。否则,如果normalizer_fn为None且使用了biases_initializer,biases则将创建变量并添加隐藏单位。

    如果activation_fn不是None,它也会应用于隐藏单位。

    1. fully_connected(inputs,
    2. num_outputs,
    3. activation_fn=nn.relu,
    4. normalizer_fn=None,
    5. normalizer_params=None,
    6. weights_initializer=initializers.xavier_initializer(),
    7. weights_regularizer=None,
    8. biases_initializer=init_ops.zeros_initializer(),
    9. biases_regularizer=None,
    10. reuse=None,
    11. variables_collections=None,
    12. outputs_collections=None,
    13. trainable=True,
    14. scope=None)

    inputs:至少为二阶张量和最后一个维度的静态值; 即[batch_size, depth],[None, None, None, channels]。
    num_outputs:整数或长整数,图层中的输出单位数。
    activation_fn:激活功能。默认值是ReLU功能。将其明确设置为“无”以跳过它并保持线性激活。
    normalizer_fn:使用标准化功能代替biases。如果 normalizer_fn提供biases_initializer,biases_regularizer则忽略并且biases不创建也不添加。没有规范化器功能,默认设置为“无”
    normalizer_params:规范化函数参数。
    weights_initializer:权重的初始化程序。
    weights_regularizer:可选的权重正则化器。
    biases_initializer:偏见的初始化程序。如果没有跳过偏见。
    biases_regularizer:偏见的可选正则化器。
    reuse:是否应重用图层及其变量。必须给出能够重用层范围的能力。
    variables_collections:所有变量的集合的可选列表或包含每个变量的不同集合列表的字典。
    outputs_collections:用于添加输出的集合。
    trainable:如果True还将变量添加到图表集合中 GraphKeys.TRAINABLE_VARIABLES(请参阅tf.Variable)。
    scope:variable_scope的可选范围。

    weighted_sum_from_feature_columns看到的其他同学实现的线性函数,直接从input_features_columns和features中进行计算。并通过tf.contrib.layers.apply_regularization进行正则化。

    1. linear_logits, collections_linear_weights, linear_bias = \
    2. layers.weighted_sum_from_feature_columns(
    3. columns_to_tensors=features,
    4. feature_columns=feature_columns,
    5. num_outputs=1,
    6. weight_collections=None,
    7. scope=None) # wide_scope
    8. linear_logit = linear_logits + linear_bias
    9. weights_list = list(map(lambda x: x[0], collections_linear_weights.values()))
    10. tf.contrib.layers.apply_regularization(tf.contrib.layers.l2_regularizer(float(l2_reg_linear)),
    11. weights_list=weights_list)

    tf.contrib.layers.fully_connected使用参考

    以wide&deep的wide部分实现为例,如下所示:

    1. dense_input_list = [tf.contrib.layers.input_from_feature_columns(columns_to_tensors=features, feature_columns=[feat]) for feat in feature_columns]
    2. dense_input = concat_fun(dense_input_list)
    3. linear_logit = tf.contrib.layers.fully_connected(dense_input, 1, activation_fn=None, weights_initializer=tf.contrib.layers.xavier_initializer(),
    4. weights_regularizer=tf.contrib.layers.l2_regularizer(float(l2_reg_linear)),
    5. biases_initializer=tf.zeros_initializer(),
    6. biases_regularizer=tf.contrib.layers.l2_regularizer(float(l2_reg_linear)),
    7. trainable=True)

    concat_fun将dense特征拼接起来

    1. def concat_fun(inputs, axis=-1):
    2. if len(inputs) == 1:
    3. return inputs[0]
    4. else:
    5. return tf.keras.layers.Concatenate(axis=axis)(inputs)

    3、tf.contrib.layers.linear简介与实例

    目前tf.contrib.layers.linear已经被替换为tf.contrib.layers.fully_connected函数。

    函数输入

    1. tf.contrib.layers.linear(
    2. inputs, num_outputs, *, activation_fn=None, normalizer_fn=None,
    3. normalizer_params=None, weights_initializer=._initializer,
    4. weights_regularizer=None,
    5. biases_initializer=,
    6. biases_regularizer=None, reuse=None, variables_collections=None,
    7. outputs_collections=None, trainable=True, scope=None
    8. )

    tf.contrib.layers.linear - TensorFlow 1.15 - W3cubDocs (来源,看上去和fully_connected一致)

    1. import tensorflow as tf
    2. x = tf.get_variable('x', shape=[2,3], initializer=tf.constant_initializer(1))
    3. y1 = tf.contrib.layers.fully_connected(x,2,weights_initializer=tf.contrib.layers.xavier_initializer(seed=1)) #默认为rule激活函数,所以输出会是0
    4. y2 = tf.contrib.layers.linear(x,2,weights_initializer=tf.contrib.layers.xavier_initializer(seed=1))
    5. y3 = tf.contrib.layers.fully_connected(x,2,weights_initializer=tf.contrib.layers.xavier_initializer(seed=1), activation_fn=None) #activation_fn=None等价于线性函数
    6. with tf.Session() as sess:
    7. sess.run(tf.global_variables_initializer())
    8. print(sess.run(y1))
    9. print(sess.run(y2))
    10. print(sess.run(y3))

    输出

    1. [[-0. -0.]
    2. [-0. -0.]]
    3. [[-0.8214258 -0.12572539]
    4. [-0.8214258 -0.12572539]]
    5. [[-0.8214258 -0.12572539]
    6. [-0.8214258 -0.12572539]]

    4、参考文档

    tf.contrib.layers.fully_connected和tf.contrib.layers.linear_得克特的博客-CSDN博客   (fully_connected与linear比较)

    tf.contrib.layers.xavier_initializer函数用法_麻木的程序猿的博客-CSDN博客

    tensorflow/layers.py at r1.8 · tensorflow/tensorflow · GitHub   (tf.contrib.layers的一些具体实现)

    Tensorflow API tf.contrib.layers.linear() 用法_LeeTioN的博客-CSDN博客

  • 相关阅读:
    SkiaSharp 之 WPF 自绘 五环弹动球(案例版)
    数字图像处理:亮度对比度-几何变换-噪声处理
    java_日期时间API
    时间空间复杂度分析--插入排序算法
    研发效能工程实践-利用Superset快速打造大数据BI平台
    计算机图形学6--讨论多边形
    RK3588 Android13 TvSetting 中性能浮窗RAM显示bug
    IDEA中报错:因为在此系统上禁止运行脚本有关详细信息,请参阅...(图文解释 亲测已解决)
    React 全栈体系(七)
    基于SSM的仓库管理系统设计与实现
  • 原文地址:https://blog.csdn.net/u013069552/article/details/129686000