当前位置: 首页 > article >正文

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,它也会应用于隐藏单位。

fully_connected(inputs,
                num_outputs,
                activation_fn=nn.relu,
                normalizer_fn=None,
                normalizer_params=None,
                weights_initializer=initializers.xavier_initializer(),
                weights_regularizer=None,
                biases_initializer=init_ops.zeros_initializer(),
                biases_regularizer=None,
                reuse=None,
                variables_collections=None,
                outputs_collections=None,
                trainable=True,
                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进行正则化。

 linear_logits, collections_linear_weights, linear_bias = \
            layers.weighted_sum_from_feature_columns(
                columns_to_tensors=features,
                feature_columns=feature_columns,
                num_outputs=1,
                weight_collections=None,
                scope=None)  # wide_scope
        linear_logit = linear_logits + linear_bias
        weights_list = list(map(lambda x: x[0], collections_linear_weights.values()))
        tf.contrib.layers.apply_regularization(tf.contrib.layers.l2_regularizer(float(l2_reg_linear)),
                                            weights_list=weights_list)

tf.contrib.layers.fully_connected使用参考

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

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

concat_fun将dense特征拼接起来

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

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

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

函数输入

tf.contrib.layers.linear(
    inputs, num_outputs, *, activation_fn=None, normalizer_fn=None,
    normalizer_params=None, weights_initializer=._initializer,
    weights_regularizer=None,
    biases_initializer=,
    biases_regularizer=None, reuse=None, variables_collections=None,
    outputs_collections=None, trainable=True, scope=None
)

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

import tensorflow as tf

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

输出

[[-0. -0.]
 [-0. -0.]]
[[-0.8214258  -0.12572539]
 [-0.8214258  -0.12572539]]
[[-0.8214258  -0.12572539]
 [-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博客


http://www.kler.cn/a/134031.html

相关文章:

  • 【MySQL】约束
  • NoSQL数据库与关系型数据库的主要区别
  • MYSQL 库,表 基本操作
  • 网页版五子棋——对战模块(服务器端开发②)
  • Rust 整数
  • 使用支付宝沙箱完成商品下单
  • C++学习 --vector
  • Linux 零拷贝splice函数
  • 【C++】入门三
  • DeepMind发布新模型Mirasol3B:更高效处理音频、视频数据
  • 竞赛选题 深度学习花卉识别 - python 机器视觉 opencv
  • ExoPlayer架构详解与源码分析(9)——TsExtractor
  • 【Synopsys Bug记录】DC综合报错(显示warning:Unable to resolve reference)
  • DrugMAP: molecular atlas and pharma-information of all drugs学习
  • transform学习资料
  • LLM大模型4位量化实战【GPTQ】
  • Linux 配置RealVNC远程访问
  • 中国制库:创新引领,效率突破,塑造行业新标准
  • redis三种集群方式
  • 21、嵌套路由实战操作
  • Smart Tomcat的使用
  • FastJsonAPI
  • 系列二十六、idea安装javap -c
  • Linux服务器挂载另一台服务器的文件夹(mount)
  • 力扣刷题篇之位运算
  • 力扣83. 删除排序链表中的重复元素(java常规解法 + 建立虚拟头节点)