使用 Tensorflow 2.x 构建神经网络时应该使用哪一层?
Which layer should I use when I build a Neural Network with Tensorflow 2.x?
我目前正在学习 TensorFlow 2.0 和 Keras。我知道激活函数用于根据数学函数计算神经网络每一层的输出。但是,在搜索层时,我找不到适合深度学习初学者的 synthetic 和 easy-to-read 信息。
有keras文档,但我想综合了解一下:
- 用于创建模型的最常用层是什么(Dense、Flatten、MaxPooling2D、Dropout 等)。
- 在什么情况下分别使用它们? (分类、回归、其他)
- 根据具体情况,使用每一层的合适方法是什么?
根据您要解决的问题,您可以使用不同的激活函数和损失函数。
- 回归问题:您想预测建筑物的价格。你有 N 个特征。当然,建筑物的价格是实数,因此您需要将
mean_squared_error
作为损失函数,并为最后一个节点设置 linear
激活函数。在这种情况下,你可以有几个 Dense()
层激活 relu
,而你的最后一层是 Dense(1,activation='linear')
。
在 Dense() 层之间,您可以添加 Dropout()
以减轻过度拟合效应(如果存在)。
- 分类问题:你想检测一个人是否患有糖尿病,同时考虑几个factors/features。在这种情况下,您可以再次使用堆叠
Dense()
层,但最后一层将是 Dense(1,activation='sigmoid')
,因为您要检测患者是否患有糖尿病。这种情况下的损失函数是'binary_crossentropy'
。在 Dense() 层之间,您可以添加 Dropout()
以减轻过度拟合效应(如果存在)。
- 图像处理问题:这里肯定有一堆 [
Conv2D(),MaxPool2D(),Dropout()
]。 MaxPooling2D
是图像处理和一些自然语言处理的典型操作(这里不展开)。有时,在卷积神经网络架构中,会使用 Flatten()
层。其目的是将特征图的维数降低为一维向量,其维数等于整个特征图深度内的元素总数。例如,如果您有一个 [28,28] 的矩阵,将其展平会将其缩小为 (1,784),其中 784=28*28.
虽然这个问题很宽泛,也许有些人会投票决定关闭它,但我还是试着对您提出的问题做一个简短的概述。我建议您开始学习神经网络背后的基础知识,然后深入研究使用框架,例如 TensorFlow 或 PyTorch。
我目前正在学习 TensorFlow 2.0 和 Keras。我知道激活函数用于根据数学函数计算神经网络每一层的输出。但是,在搜索层时,我找不到适合深度学习初学者的 synthetic 和 easy-to-read 信息。
有keras文档,但我想综合了解一下:
- 用于创建模型的最常用层是什么(Dense、Flatten、MaxPooling2D、Dropout 等)。
- 在什么情况下分别使用它们? (分类、回归、其他)
- 根据具体情况,使用每一层的合适方法是什么?
根据您要解决的问题,您可以使用不同的激活函数和损失函数。
- 回归问题:您想预测建筑物的价格。你有 N 个特征。当然,建筑物的价格是实数,因此您需要将
mean_squared_error
作为损失函数,并为最后一个节点设置linear
激活函数。在这种情况下,你可以有几个Dense()
层激活relu
,而你的最后一层是Dense(1,activation='linear')
。 在 Dense() 层之间,您可以添加Dropout()
以减轻过度拟合效应(如果存在)。 - 分类问题:你想检测一个人是否患有糖尿病,同时考虑几个factors/features。在这种情况下,您可以再次使用堆叠
Dense()
层,但最后一层将是Dense(1,activation='sigmoid')
,因为您要检测患者是否患有糖尿病。这种情况下的损失函数是'binary_crossentropy'
。在 Dense() 层之间,您可以添加Dropout()
以减轻过度拟合效应(如果存在)。 - 图像处理问题:这里肯定有一堆 [
Conv2D(),MaxPool2D(),Dropout()
]。MaxPooling2D
是图像处理和一些自然语言处理的典型操作(这里不展开)。有时,在卷积神经网络架构中,会使用Flatten()
层。其目的是将特征图的维数降低为一维向量,其维数等于整个特征图深度内的元素总数。例如,如果您有一个 [28,28] 的矩阵,将其展平会将其缩小为 (1,784),其中 784=28*28.
虽然这个问题很宽泛,也许有些人会投票决定关闭它,但我还是试着对您提出的问题做一个简短的概述。我建议您开始学习神经网络背后的基础知识,然后深入研究使用框架,例如 TensorFlow 或 PyTorch。