关于神经网络激活功能的困惑

时间:2019-06-17 14:45:12

标签: python tensorflow neural-network activation-function data-layers

我遵循了有关使用Python和Tensorflow进行图像分类的教程。

我现在正在尝试将深度学习应用于自定义情况。我制作了一个卖方/购买者的模拟程序,客户按照其意愿购买了一块石头。宝石具有颜色,大小和曲线百分比。客户最希望的价格是石头,客户支付的金额就更多。对于卖方来说,最稀有的宝石价格应该更高。然后,该程序生成了100.000块购买的石头,以提供神经网络,这将试图击败其他卖家。数据集看起来像这样:

dataset

我现在正在尝试创建我的神经网络。在本教程中,他将使用两个具有relu激活功能和MaxPooling2D的Conv2D层,然后是Flatten层,Dense层,最后是另一个具有Sigmoid激活功能的Dense层。

在阅读了一些文档之后,我发现Conv2D层用于矩阵,但是我的数据已经平坦了,所以我更喜欢仅使用密集层。

我的第一个问题是:我的神经网络是否需要一个具有relu函数的密集层:

model.add(Dense(64, activation='relu', input_dim(3)))

如果我的程序仅生成正值?

我的第二个问题是:如果我已经通过这样划分数据的方式对数据进行归一化以使其介于0和1之间,那么我的神经网络是否需要S型函数? :

X[:,0] /= 256.0
X[:,1] /= 50.0
X[:,2] /= 100.0

这些值是每列的最大值。那我需要一个S型函数吗?

实际上我的神经网络看起来像这样:

model = Sequential()
model.add(Dense(64, activation='relu', input_dim(3)))
model.add(Dense(64, activation='relu'))
model.add(Dense(1,  activation='sigmoid'))

但是我对模型的效率感到困惑。我的神经网络可以工作吗?如果没有,我必须使用哪种层和激活功能?

2 个答案:

答案 0 :(得分:1)

  

我的第一个问题是:我的神经网络是否需要一个具有   像这样的relu函数:

是的。即使您的数据只是正数,您的网络也需要ReLU。 ReLU(通常是激活函数)的想法是,它们会增加一定的复杂度,以便分类器可以学习概括。

考虑一个以图像为输入的CNN。这里的输入数据也只包含正值([0-1]或[0-255]),它们通常具有许多和许多层,具有ReLU非线性。

  

如果我的程序仅生成正值?

您的困惑是您的实际输入输出关系仅产生正值,但是您的分类器仍包含可以为负的权重,因此,否则图层输出仍可能为负。

此外,如果您没有像ReLU这样的任何非线性,那么没有多层的意义,因为它们不会增加分类器的复杂性。

  

第二个问题是:如果我已经通过将数据像这样对它们进行归一化以使它们介于0和1之间,那么我的神经网络是否需要S型函数?

是的。您还需要S型。与上述相同的推理。您的数据可能是正数,但您的输出层仍将能够生成负值或其他超出预期范围的值。

具有线性输出激活函数将使学习变得几乎不可能,特别是如果您的输出范围在[0,1]之内。

答案 1 :(得分:0)

如果您像这样(/ max)进行标准化,也可以,您也可以在输入中使用Sigmoid,但是在最大和最小值上精度较低。但是我不明白为什么您使用Conv2D图层,因为它仅用4个输入就完全连接了。另外,如果您生成完全随机的数据集,则网络将不会学习任何内容

相关问题