Tensorflow之神经网络nn模块详解

本文深入探讨了Tensorflow中的nn模块,包括激活函数如ReLU、Softplus,卷积层、池化层的使用,以及标准化、损失函数、分类操作等核心概念,适合深度学习开发者学习。
摘要由CSDN通过智能技术生成

Tensorflow中的tensorflow.nn模块是TensorFlow用于深度学习计算的核心模块。

主要的API:
  • 激活函数(Activation Functions)

    操作 描述
    tf.nn.relu(features, name=None) 整流函数:max(features, 0)
    tf.nn.relu6(features, name=None) 以6为阈值的整流函数:min(max(features, 0), 6)
    tf.nn.elu(features, name=None) elu函数,exp(features) - 1 if < 0,否则featuresExponential Linear Units (ELUs)
    tf.nn.softplus(features, name=None) 计算softplus:log(exp(features) + 1)
    tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None) 计算dropout,keep_prob为keep概率, noise_shape为噪声的shape
    tf.nn.bias_add(value, bias, data_format=None, name=None) 对value加一偏置量 此函数为tf.add的特殊情况,bias仅为一维, 函数通过广播机制进行与value和, 数据格式可以与value不同,返回为与value相同格式
    tf.sigmoid(x, name=None) y = 1 / (1 + exp(-x))
    tf.tanh(x, name=None) tf.tanh(x, name=None)
  • 卷积函数(Convolution)

    操作 描述
    tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None) 在给定的4D input与 filter下计算2D卷积输入shape为 [batch, height, width, in_channels]
    tf.nn.conv3d(input, filter, strides, padding, name=None) 在给定的5D input与 filter下计算3D卷积输入shape为[batch, in_depth, in_height, in_width, in_channels]
    tf.nn.depthwise_conv2d(input, filter, strides, padding, name=None) 卷积核能相互独立的在自己的通道上面进行卷积操作。
    tf.nn.separable_conv2d(input, depthwise_filter, pointwise_filter, strides, padding, name=None) 在纵深卷积 depthwise filter 之后进行逐点卷积 separable filter

    注意,虽然这些操作被称之为“卷积”操作,但是严格的说,他们只是互相关,因为卷积核没有做一个逆向的卷积过程

  • 池化函数(Pooling)

    操作 描述
    tf.nn.avg_pool(value, ksize, strides, padding, data_format=’NHWC’, name=None) 平均方式池化
    tf.nn.max_pool(value, ksize, strides, padding, data_format=’NHWC’, name=None) 最大值方法池化
    tf.nn.max_pool_with_argmax(input, ksize, strides,padding, Targmax=None, name=None) 返回一个二维元组(output,argmax),最大值pooling,返回最大值及其相应的索引
    tf.nn.avg_pool3d(input, ksize, strides, padding, name=None) 3D平均值pooling
    tf.nn.max_pool3d(input, ksize, strides, padding, name=None) 3D最大值pooling
  • 数据标准化(Normalization)

    操作 描述
    tf.nn.l2_normalize(x, dim, epsilon=1e-12, name=None) 对维度dim进行L2范式标准化output = x / sqrt(max(sum(x2), epsilon))
    tf.nn.sufficient_statistics(x, axes, shift=None, keep_dims=False, name=None) 计算与均值和方差有关的完全统计量返回4维元组,元素个数,元素总和,元素的平方和,shift结果参见算法介绍
    tf.nn.normalize_moments(counts, mean_ss, variance_ss, shift, name=None) 基于完全统计量计算均值和方差
    tf.nn.moments(x, axes, shift=None, name=None, keep_dims=False) 直接计算均值与方差
    tf.nn.local_response_normalization(input, depth_radius=None, bias=None, alpha=None, beta=None, name=None) 这个函数的作用是计算局部数据标准化。输入的数据 input 是一个四维的张量,但该张量被看做是一个一维的向量( input 的最后一维作为向量),向量中的每一个元素都是一个三维的数组(对应 input 的前三维)。向量的每一个元素都是独立的被标准化的。
  • 损失函数(Losses)

    操作 描述
    tf.nn.l2_loss(t, name=None) output = sum(t ** 2) / 2
  • 分类函数(Classification)

    操作 描述
    tf.nn.sigmoid_cross_entropy_with_logits(logits, targets, name=None)* 计算输入logits, targets的交叉熵
    tf.nn.softmax(logits, name=None) 计算softmax softmax[i, j] = exp(logits[i, j]) / sum_j(exp(logits[i, j]))
    tf.nn.log_softmax(logits, name=None) logsoftmax[i, j] = logits[i, j] - log(sum(exp(logits[i])))
    tf.nn.softmax_cross_entropy_with_logits(logits, labels, name=None) 计算logits和labels的softmax交叉熵logits, labels必须为相同的shape与数据类型
    tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels, name=None) 计算logits和labels的softmax交叉熵
    tf.nn.weighted_cross_entropy_with_logits(logits, targets, pos_weight, name=None) 与sigmoid_cross_entropy_with_logits()相似,但给正向样本损失加了权重pos_weight
  • 符号嵌入(Embeddings)

    操作 描述
    tf.nn.embedding_lookup(params, ids, partition_strategy=’mod’, name=None, validate_indices=True) 根据索引ids查询embedding列表params中的tensor值, 如果len(params) > 1,id将会安照partition_strategy策略进行分割 1、如果partition_strategy为”mod”,id所分配到的位置为p = id % len(params)比如有13个ids,分为5个位置,那么分配方案为:[[0, 5, 10], [1, 6, 11], [2, 7, 12], [3, 8], [4, 9]] , 2、如果partition_strategy为”div”,那么分配方案为: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10], [11, 12]]
    tf.nn.embedding_lookup_sparse(params, sp_ids, sp_weights, partition_strategy=’mod’, name=None, combiner=’mean’) 对给定的ids和权重查询embedding 1、sp_ids为一个N x M的稀疏tensor,N为batch大小,M为任意,数据类型int64, 2、sp_weights的shape与sp_ids的稀疏tensor权重,浮点类型,若为None,则权重为全’1’
  • 求值网络(Evaluation)

    操作 描述
    tf.nn.top_k(input, k=1, sorted=True, name=None) 返回前k大的值及其对应的索引
    tf.nn.in_top_k(predictions, targets, k, name=None) 返回判断是否targets索引的predictions相应的值是否在在predictions前k个位置中,返回数据类型为bool类型,len与predictions同
  • 监督候选采样网络(Candidate Sampling)
    对于有巨大量的多分类与多标签模型,如果使用全连接softmax将会占用大量的时间与空间资源,所以采用候选采样方法仅使用一小部分类别与标签作为监督以加速训练

    操作 描述
    Sampled Loss Functions
    tf.nn.nce_loss(weights, biases, inputs, labels, num_sampled,num_classes, num_true=1, sampled_values=None,remove_accidental_hits=False, partition_strategy=’mod’,name=’nce_loss’) 返回noise-contrastive的训练损失结果
    tf.nn.sampled_softmax_loss(weights, biases, inputs, labels, num_sampled, num_classes, num_true=1, sampled_values=None,remove_accidental_hits=True, partition_strategy=’mod’, name=’sampled_softmax_loss’) 返回sampled softmax的训练损失 参考- Jean et al., 2014第3部分
    Candidate Samplers
    tf.nn.uniform_candidate_sampler(true_classes, num_true, num_sampled, unique, range_max, seed=None, name=None) 通过均匀分布的采样集合返回三元tuple 1、sampled_candidates 候选集合。 2、期望的true_classes个数,为浮点值 3、期望的sampled_candidates个数,为浮点值
    tf.nn.log_uniform_candidate_sampler(true_classes, num_true,num_sampled, unique, range_max, seed=None, name=None) 通过log均匀分布的采样集合,返回三元tuple
    tf.nn.learned_unigram_candidate_sampler(true_classes, num_true, num_sampled, unique, range_max, seed=None, name=None) 根据在训练过程中学习到的分布状况进行采样 返回三元tuple
    tf.nn.fixed_unigram_candidate_sampler(true_classes, num_true,num_sampled, unique, range_max, vocab_file=”, distortion=1.0, num_reserved_ids=0, num_shards=1, shard=0, unigrams=(), seed=None, name=None) 基于所提供的基本分布进行采样
  • 保存与恢复变量

操作 描述
类tf.train.Saver(Saving and Restoring Variables)
tf.train.Saver.init(var_list=None, reshape=False, sharded=False, max_to_keep=5, keep_checkpoint_every_n_hours=10000.0, name=None, restore_sequentially=False,saver_def=None, builder=None) 创建一个存储器Savervar_list定义需要存储和恢复的变量
tf.train.Saver.save(sess, save_path, global_step=None, latest_filename=None, meta_graph_suffix=’meta’,write_meta_graph=True) 保存变量
tf.train.Saver.restore(sess, save_path) tf.train.Saver.restore(sess, save_path)
tf.train.Saver.last_checkpoints 列出最近未删除的checkpoint 文件名
tf.train.Saver.set_last_checkpoints(last_checkpoints) 设置checkpoint文件名列表
tf.train.Saver.set_last_checkpoints_with_time(last_checkpoints_with_time) 设置checkpoint文件名列表和时间戳
  • 循环神经网络(Recurrent Neural Networks)
操作 描述
tf.nn.rnn(cell, inputs, initial_state=None, dtype=None, sequence_length=None, scope=None) 基于RNNCell类的实例cell建立循环神经网络
tf.nn.dynamic_rnn(cell, inputs, sequence_length=None, initial_state=None, dtype=None, parallel_iterations=None, swap_memory=False, time_major=False, scope=None) 基于RNNCell类的实例cell建立动态循环神经网络与一般rnn不同的是,
  • 11
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于TensorFlow搭建模块神经网络的示例代码: ```python import tensorflow as tf # 定义输入层 def create_input_layer(input_size): return tf.placeholder(tf.float32, shape=[None, input_size], name='input') # 定义隐层 def create_hidden_layer(input_layer, num_neurons, activation): input_size = int(input_layer.shape[1]) stddev = 2.0 / tf.sqrt(input_size + num_neurons) weights = tf.Variable(tf.truncated_normal([input_size, num_neurons], stddev=stddev)) biases = tf.Variable(tf.zeros([num_neurons])) layer = tf.matmul(input_layer, weights) + biases if activation: layer = activation(layer) return layer # 定义输出层 def create_output_layer(input_layer, num_classes): input_size = int(input_layer.shape[1]) stddev = 2.0 / tf.sqrt(input_size + num_classes) weights = tf.Variable(tf.truncated_normal([input_size, num_classes], stddev=stddev)) biases = tf.Variable(tf.zeros([num_classes])) layer = tf.matmul(input_layer, weights) + biases return layer # 定义模型 def build_model(input_size, hidden_layers, num_classes): input_layer = create_input_layer(input_size) hidden_layer = input_layer for num_neurons, activation in hidden_layers: hidden_layer = create_hidden_layer(hidden_layer, num_neurons, activation) output_layer = create_output_layer(hidden_layer, num_classes) return input_layer, output_layer # 测试 input_size = 784 hidden_layers = [(256, tf.nn.relu), (128, tf.nn.relu)] num_classes = 10 input_layer, output_layer = build_model(input_size, hidden_layers, num_classes) print(input_layer) print(output_layer) ``` 这个示例代码定义了一个三层神经网络,包括一个输入层、两个隐层和一个输出层。其中,输入层和输出层都比较简单,而隐层则是根据输入层的大小、神经元个数和激活函数来创建的。同时,这个代码还支持模型的构建和测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值