Sequential模型、Flatten层、Dense层

本文详细介绍了Sequential模型的两种添加层方法,包括通过add()函数和直接添加。同时,讲解了模型编译、训练及评估的过程。重点讨论了Dense层的参数及其作用,如激活函数、输入维度等。此外,还阐述了Flatten层在处理多维数据时的作用。文章适合对深度学习感兴趣的读者,特别是初学者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sequential模型

顺序模型
核心操作是添加layers,有两种方法
第一种:通过add()添加

model = Sequential()
model.add(tf.keras.layers.Dense(10,input_shape(1,),activation='relu'))#10表示输出数据的维度,后面表示输入的形状,激活函数为relu
model.add(tf.keras.layers.Dense(28,input_shape(1,)))

第二种;直接添加

model = Sequential(tf.keras.layers.Dense(10,input_shape(1,),activation='relu'),tf.keras.layers.Dense(28,input_shape(1,)))

选择优化器(如rmsprop或adagrad)并指定损失函数(如categorical_crossentropy)来指定反向传播的计算方法

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop')

调用fit函数将数据提供给模型。这里还可以指定批次大小(batch size)、迭代次数、验证数据集等等。

model.fit(x_train, y_train, batch_size=32, epochs=10,validation_data=(x_val, y_val))

使用evaluate方法来评估模型。

score = model.evaluate(x_test,y_test,batch_size = 32)

Flatten层(展平层)

用来对数组进行展平操作的
假设有一张灰度图片,这个图片只有3x3个像素点,分别是从1到9,我们对其进行flatten操作。首先它会把每1行进行分开,然后用第2行接在第1行后面,形成一个新的数组1,2,3,4,5,6,最后再把第3行的7,8,9接在新生成的数组后面形成最终的数组。
例如:如果是彩色图片的话,它会有3个颜色通道,进行fltten时的步骤也是一样的。
在这里插入图片描述

Dense层

keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)

参数
units :代表该层的输出维度或神经元个数, units解释为神经元个数为了方便计算参数量,解释为输出维度为了方便计算维度
activation=None:激活函数.但是默认 liner (详见API的activation)
use_bias=True:布尔值,该层是否使用偏置向量b
kernel_initializer:初始化w权重 (详见API的initializers)
bias_initializer:初始化b权重 (详见API的initializers)
kernel_regularizer:施加在权重w上的正则项 (详见API的regularizer)
bias_regularizer:施加在偏置向量b上的正则项 (详见API的regularizer)
activity_regularizer:施加在输出上的正则项 (详见API的regularizer)
kernel_constraint:施加在权重w上的约束项 (详见API的constraints)
bias_constraint:施加在偏置b上的约束项 (详见API的constraints)

# 作为 Sequential 模型的第一层,需要指定输入维度。可以为 input_shape=(16,) 或者 input_dim=16,这两者是等价的。
model = Sequential()
model.add(Dense(32, input_shape=(16,))) #其输出数组的尺寸为 (*, 32),模型以尺寸(*, 16) 的数组作为输入

# 在第一层之后,就不再需要指定输入的尺寸了:
model.add(Dense(32))

input_shape是指输入张量的shape
input_dim是指的张量的维度
比如,一个一阶的张量[1,2,3]的shape是(3,),input_dim = 1(因为是一阶)
一个二阶的张量[[1,2,3],[4,5,6]]的shape是(2,3),input_dim = 2(因为是二阶)
一个三阶的张量[[[1],[2],[3]],[[4],[5],[6]]]的shape是(2,3,1),input_dim = 3(因为是三阶)

参考
https://blog.csdn.net/mogoweb/article/details/82152174
https://blog.csdn.net/fisherming/article/details/114827976

<think>好的,我现在需要帮助用户了解PyTorch中不同神经网络的作用,具体包括卷积、激活函数、最大池化展平和全连接。首先,我得回忆一下每个的基本功能,并结合用户提供的引用内容来确保准确性。 首先看用户提供的引用,特别是引用[2]和[4],这些内容详细描述了卷积和池化的作用,以及全连接的问题。引用[2]提到卷积用于识别空间模式,之后的最大池化降低位置敏感性。这应该是卷积和池化的核心作用。另外,引用[4]提到全连接参数过多的问题,以及GAP(全局平均池化)的替代方案,说明全连接在传统CNN中的角色和可能的优化方法。 接下来,我需要逐个分析每个的作用: 1. **卷积(Convolutional Layer)**:主要负责提取图像特征,通过卷积核扫描输入数据,识别局部模式如边缘、纹理等。用户引用[2]中提到使用5×5的窗口,输出通道数逐渐增加,这有助于在不同次提取特征。需要解释输入输出通道、卷积核大小等参数的作用。 2. **激活函数(Activation Function)**:如ReLU或Sigmoid,引入非线性,使网络能够学习复杂模式。引用[2]提到在卷积后使用Sigmoid激活,不过现在更常用ReLU。需要说明不同激活函数的优缺点。 3. **最大池化(Max Pooling Layer)**:降低空间维度,减少计算量,同时增强模型对位置变化的鲁棒性。引用[2]中的池化窗口为2×2,步幅2,确保不重叠,有效减少特征图尺寸。 4. **展平Flatten Layer)**:将多维特征图转换为一维向量,以便输入全连接。引用[4]提到全连接需要展平操作,但可能用GAP替代。需要解释其过渡作用。 5. **全连接(Fully Connected Layer)**:进行分类或回归,整合前面提取的特征。但引用[4]指出参数量大易过拟合,可能需要替代方法。需说明其应用场景和潜在问题。 在组织回答时,需要结构清晰,每部分用标题分开,给出PyTorch代码示例,并引用相关段落。例如,卷积的解释引用[2],全连接的问题引用[4]。 同时,用户要求生成相关问题,可能需要围绕各的作用、参数设置、优缺点、替代方案等提问,比如卷积核大小的影响、激活函数选择、池化的替代方法、展平的必要性等。 需要确保所有数学公式用$...$或$$...$$格式,比如卷积操作可以写成$Y = W * X + b$。检查LaTeX语法是否正确,避免错误。 最后,确保回答使用中文,语言通顺,符合用户的结构要求,分点解释每的作用,并附上代码示例和引用标记。然后生成相关问题,涵盖各个的功能、比较和优化方法。</think>### PyTorch中不同神经网络的作用解释 #### 1. 卷积(Convolutional Layer) 作用:通过卷积核提取输入数据的**局部空间特征**(如边缘、纹理等)。 - 输入输出通道:若定义`nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5)`,表示从3通道(如RGB图像)提取6种不同的特征[^2]。 - 数学表达式:卷积操作可表示为$Y = W * X + b$,其中$W$为卷积核权重,$X$为输入数据。 ```python import torch.nn as nn conv_layer = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5) ``` #### 2. 激活函数(Activation Function) 作用:引入非线性,增强模型表达能力。 - **ReLU**(常用):$f(x) = \max(0, x)$,缓解梯度消失问题。 - **Sigmoid**(引用[2]中使用):$f(x) = \frac{1}{1+e^{-x}}$,将输出压缩到$(0,1)$,但可能引发梯度消失。 ```python activation = nn.ReLU() # 或 nn.Sigmoid() ``` #### 3. 最大池化(Max Pooling Layer) 作用:**降低特征图尺寸**,增强平移不变性。 - 池化窗口(如2×2)和步长(如2)相同时,输出尺寸减半。 - 数学表达式:$Y_{i,j} = \max(X_{2i:2i+2, 2j:2j+2})$。 ```python pool_layer = nn.MaxPool2d(kernel_size=2, stride=2) ``` #### 4. 展平Flatten Layer) 作用:将多维特征图**转换为一维向量**,以输入全连接。 - 例如,4×4×16的特征图展平后为256维向量。 ```python flatten = nn.Flatten() # 输入形状(batch, C, H, W) → 输出(batch, C*H*W) ``` #### 5. 全连接(Fully Connected Layer) 作用:整合特征并完成**分类或回归**。 - 潜在问题:参数量过大(如输入256维、输出10类时参数量为256×10=2560),可能引发过拟合[^4]。 - 替代方案:全局平均池化(GAP)直接输出特征图的空间平均值。 ```python fc_layer = nn.Linear(in_features=256, out_features=10) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值