CNN---Dropout

1.概念:

        Dropout是解决模型过拟合的一种关键技术。通过Dropout可以防止网络单元中的过度适应问题。Dropout的实现过程是:在训练期间,从大量的不同程度的“稀疏”网络中提取样本数据,在测试阶段,通过简单地使用具有较小权重的单个“非稀疏”网络,从而可以很容易地近似平均所有这些“稀疏”网络的预测效果。

2.代码实现:

import numpy as np

def dropout(x, keep_prob):
    d3 = (np.random.rand(*x.shape) < keep_prob)  #dropout
    print(d3)
    x = np.multiply(x,d3)
    print(x)
    x = x/keep_prob  #inverted dropout
    return x

a3 = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype=np.float32)
a3 = dropout(a3,0.8)
print(a3)

 3.小结:

        Dropout通过随机删除神经网络中的神经单元,从而使得网络不依赖于任何一个特征,从而产生收缩权重的平方范数的效果。Dropout的一大缺点是损失函数不再被明确定义。因为每次迭代都会随机移除一些节点,因此很难检查梯度是否下降的性能。因此,在使用Dropout时,可先令超参数keep_prob=1,然后保证损失函数是单调递减的,然后再调整keep_prob的超参数。

参考文献:

1. Dropout: A Simple Way to Prevent Neural Networks from Overfitting

2.DeepLearning.ai 

注:本文属于个人理解,若有错误,欢迎指正!

05-05
### CNN-F 模型架构及其实现细节 CNN-F 是一种经典的卷积神经网络(Convolutional Neural Network, CNN)模型,最初由 Matthew D. Zeiler 和 Rob Fergus 提出并用于图像分类任务。该模型的设计灵感来源于 AlexNet 的成功案例,但在参数数量和计算复杂度方面进行了优化[^1]。 #### 1. 模型架构概述 CNN-F 的核心设计目标是在保持较高性能的同时减少模型的参数量和内存占用。其主要特点如下: - **输入尺寸**:通常接受固定大小的输入图片(例如 $224 \times 224$ 像素),这与 ImageNet 数据集的标准预处理流程一致。 - **卷积层配置**:包含多个卷积层,每层之后接 ReLU 非线性激活函数以及最大池化操作。具体来说: - 卷积核大小一般为 $3 \times 3$ 或 $5 \times 5$,步幅为 1。 - 最大池化的窗口大小通常是 $2 \times 2$,步幅也为 2。 - **全连接层**:在最后一个卷积层之后,通过展平操作将特征图转换为向量形式,并送入若干全连接层进行进一步处理。 - **Dropout 正则化**:为了防止过拟合,在某些全连接层之间引入 Dropout 技术以随机丢弃一部分神经元[^1]。 以下是 CNN-F 的典型层次结构描述表: | 层次 | 类型 | 输出形状 | 参数说明 | |------|--------------|----------------|-----------------------------------| | 1 | Convolution | $55 \times 55$ | 使用 $7 \times 7$, stride=2 | | 2 | Max Pooling | $27 \times 27$ | Kernel size=$3 \times 3$, stride=2 | | ... | 更多卷积层...| | | #### 2. 实现细节 下面是一个基于 TensorFlow/Keras 的简单实现示例代码片段: ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout def create_cnn_f_model(input_shape=(224, 224, 3), num_classes=1000): model = Sequential() # First convolution layer with max pooling model.add(Conv2D(96, kernel_size=(7, 7), strides=(2, 2), activation='relu', input_shape=input_shape)) model.add(MaxPooling2D(pool_size=(3, 3), strides=(2, 2))) # Additional layers omitted here... # Fully connected layers at the end model.add(Flatten()) model.add(Dense(4096, activation='relu')) model.add(Dropout(0.5)) # Regularization via dropout model.add(Dense(num_classes, activation='softmax')) return model cnn_f_model = create_cnn_f_model() cnn_f_model.summary() ``` 此代码定义了一个基础版的 CNN-F 架构,其中省略了一些中间卷积层以便简化展示逻辑。 --- ### 数学原理补充 虽然未提及具体的数学表达式,但可以理解的是,每一层的操作都可以表示成矩阵乘法的形式加上偏置项$b$再经过非线性变换$f(\cdot)$得到最终输出$h(x)=f(Wx+b)$。对于卷积运算而言,则涉及滑动窗口内的局部加权求和过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值