Python 3.x KERA如何使用Glorot制服和Relu?

Python 3.x KERA如何使用Glorot制服和Relu?,python-3.x,tensorflow,keras,Python 3.x,Tensorflow,Keras,我想问Keras如何使用Glorot统一初始值设定项和relu处理输入? 我对Keras如何处理输入感到困惑 例如,我有一个这样的代码 model = Sequential() model.add(ZeroPadding2D((1, 1), input_shape=(224, 224, 3))) model.add(Convolution2D(64, (3, 3), activation='relu')) model.add(ZeroPadding2D((1, 1))) model.add(Co

我想问Keras如何使用Glorot统一初始值设定项和relu处理输入? 我对Keras如何处理输入感到困惑

例如,我有一个这样的代码

model = Sequential()
model.add(ZeroPadding2D((1, 1), input_shape=(224, 224, 3)))
model.add(Convolution2D(64, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(Convolution2D(4096, (7, 7), activation='relu'))
model.add(Dropout(0.5))
model.add(Convolution2D(4096, (1, 1), activation='relu'))
model.add(Dropout(0.5))
model.add(Convolution2D(2622, (1, 1)))
model.add(Flatten())
model.add(Activation('softmax'))
我知道在ConvNet中使用RELU激活函数作为计算步骤。RELU将任何负元素的值设置为0,否则如果为正,则设置为1。但他们是如何处理上述输入的

Input->Glorot->RELU
Input->RELU->Glorot
? 有人能向我解释吗

什么是Glorot制服?它是如何工作的

根据Keras文件

Glorot统一初始值设定项,也称为Xavier统一初始值设定项。 它从[-limit,limit]内的均匀分布中提取样本,其中limit是sqrt(6/(fan_in+fan_out)),其中fan_in是权重张量中的输入单位数,fan_out是权重张量中的输出单位数

它只是一个初始化器,用于初始化Keras中每个层的权重。它选择了不同的策略。它计算极限[-limit,limit],其中limit=sqrt(6/(输入单位+输出单位))。然后从[-极限,极限]中随机选择权重

在Keras中,所有这些东西是如何按顺序工作的

遵循以下步骤

  • 使用glorot uniform初始化权重
  • 输入向量与权重矩阵相乘
  • 为上述点积添加一个偏差
  • 对上述总和执行ReLU激活
  • 因此,

    Glorot_Uniform  -> Input -> ReLU
    

    我在哪里可以看到从1到4的步骤文档?嗯,它没有在Keras中记录。但是,这是所有NN都遵循的标准程序。第2步的权重矩阵如何?在哪里可以看到矩阵?他不应该和relu一起使用吗?不是glorot初始化?@HashRocketSyntax已经在下面解释过了。Glorot先进行初始化,然后乘以输入,最后是RELUi我说的“不要使用Glorot w relu。使用he”@HashRocketSyntax he?他是什么?为什么?这是一种初始化,就像glorot一样。我一直在读到某些激活比某些初始化做得更好。