Deep Neural Networks with Pytorch(8)

本文介绍了深度学习中的关键概念,包括使用PyTorch实现的Dropout以防止过拟合,神经网络权重的初始化如Xavier和He方法,以及动量法在梯度下降中的应用以避免局部最小值和鞍点问题。同时,探讨了Batch Normalization的作用及其在训练和测试阶段的使用。
摘要由CSDN通过智能技术生成

目录

8.1  Deep Neural Networks-nn.ModuleList()

8.2  Dropout

dropout

pytorch实现dropout

8.2  Neural Network Initialization Weights

1.不初始化权重具有的问题

2.不同的网络参数初始化方法:缺省方法,泽西尔方法,何方法

8.3  Gradient Descent with Momentum

1.什么是动量momentum,动量如何解决陷入鞍点问题

2.什么是动量momentum,动量如何解决陷入陷入局部最小值点问题

8.4  Batch Normalization

1.batch normalization的例子

2.pytorch实现batch normalization

3.为什么batch normalization是有效的


8.1  Deep Neural Networks-nn.ModuleList()

 

图8.1  用nn.ModuleList()+Layers数组方式快速简洁搭建DNN


8.2  Dropout

Dropout是一种提高深度神经网络性能的手段,用来防止过拟合

  1. dropout

  2. pytorch实现dropout

     

     1.dropout

在实际调参过程中当隐层数量过多或者隐层单元数量过多都会导致过拟合现象,需要组合不同数量的隐层单元数和隐层数是很麻烦的,一种常用的做法是实现一个复杂的模型,对模型使用一种正则化手段——dropout.

Dropout分两个阶段,在训练时使用dropout,测试时关闭dropout.

Dopout的实现方法是将激活函数乘以一个伯努利分布随机数r(比努力分布是离散概率分布,随机变量r以概率p取值为0,以概率(1-p)取值为1)P越大,关闭的神经元越多。每次迭代关闭哪个神经元都是随机的,一般来说网络中神经元数量越多,p值应该越大

 

  

图8.2-1  dropout实例图8.2-2  pytorch为了让每个单元被激活的概率为(1-p),将每个激活值除以(1-p)

 图8.2-2  pytorch为了让每个单元被激活的概率为(1-p),将每个激活值除以(1-p)

 

图8.2-3  更多隐单元的层应该有更大的p值,反之更小

再次声明:只有训练的时候需要dropout,测试时不需要dropout

 

图8.2-4 使用/不适用dropout的训练-测试误差

蓝黄两线是不适用dropout的训练-测试误差,可以看到训练误差一直减小,测试误差反而上升,这表明模型在拟合噪声;而绿红二线是使用dropout之后的训练*测试误差,可以看到此时并没有出现过拟合现象。

图8.2-5 dropout的pytorch实现,relu先激活再drop或者先drop再激活的结果一样

Deep Recurrent Neural Networks(深度循环神经网络)是一种适用于序列数据处理的深度神经网络模型,常用于语音识别、自然语言处理等任务。如果你想使用Deep Recurrent Neural Networks模型,可以使用深度学习框架来实现,比如TensorFlow、PyTorch等。 以下是使用TensorFlow实现Deep Recurrent Neural Networks模型的示例代码,供你参考: ```python import tensorflow as tf # 定义模型参数 input_dim = 10 # 输入维度 hidden_dim = 64 # 隐层维度 output_dim = 2 # 输出维度 num_layers = 3 # RNN层数 # 定义输入张量 inputs = tf.placeholder(tf.float32, shape=[None, None, input_dim]) # 定义RNN单元 cell = tf.nn.rnn_cell.BasicLSTMCell(hidden_dim) # 堆叠多层RNN stacked_rnn = tf.nn.rnn_cell.MultiRNNCell([cell] * num_layers) # 初始化RNN状态 initial_state = stacked_rnn.zero_state(tf.shape(inputs)[0], tf.float32) # 计算RNN输出 output, state = tf.nn.dynamic_rnn(stacked_rnn, inputs, initial_state=initial_state) # 定义输出层 weights = tf.Variable(tf.random_normal([hidden_dim, output_dim])) bias = tf.Variable(tf.random_normal([output_dim])) logits = tf.matmul(output[:, -1, :], weights) + bias # 定义损失函数和优化器 labels = tf.placeholder(tf.int32, shape=[None]) loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits)) optimizer = tf.train.AdamOptimizer().minimize(loss) # 训练模型 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for i in range(num_epochs): # 获取批次数据 batch_inputs, batch_labels = get_batch_data(batch_size) # 训练模型 _, loss_val = sess.run([optimizer, loss], feed_dict={inputs: batch_inputs, labels: batch_labels}) print('Epoch %d, loss: %f' % (i, loss_val)) ``` 在这个示例代码中,我们使用了TensorFlow来实现一个三层的LSTM模型用于序列分类任务。具体来说,我们定义了模型的输入张量、RNN单元、RNN层数、输出层、损失函数和优化器,并在训练过程中动态输入数据进行模型的训练。 注意,这只是一个示例代码,实际的Deep Recurrent Neural Networks模型实现可能会更加复杂和庞大,需要根据具体的任务和数据进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值