当前位置: 首页 > 面试题库 >

如何在Keras中调用BatchNormalization函数?

陆雅志
2023-03-14
问题内容

如果要在Keras中使用BatchNormalization函数,是否仅需要在开始时调用一次?

我为此阅读了此文档:http :
//keras.io/layers/normalization/

我看不到该怎么称呼它。下面是我尝试使用它的代码:

model = Sequential()
keras.layers.normalization.BatchNormalization(epsilon=1e-06, mode=0, momentum=0.9, weights=None)
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(64, init='uniform'))
model.add(Activation('tanh'))
model.add(Dropout(0.5))
model.add(Dense(2, init='uniform'))
model.add(Activation('softmax'))

sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd)
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose = 2)

我问是因为如果我用第二行(包括批处理规范化)运行代码,而如果我不使用第二行运行代码,则会得到类似的输出。因此,要么我没有在正确的地方调用该函数,要么我猜它并没有太大的区别。


问题答案:

只是为了更详细地回答这个问题,正如Pavel所说的,批处理规范化只是另一层,因此您可以使用它来创建所需的网络体系结构。

一般用例是在网络的线性层和非线性层之间使用BN,因为它可以标准化激活函数的输入,从而使您位于激活函数(例如Sigmoid)的线性部分的中心。有一小的讨论在这里

在上述情况下,这可能类似于:

# import BatchNormalization
from keras.layers.normalization import BatchNormalization

# instantiate model
model = Sequential()

# we can think of this chunk as the input layer
model.add(Dense(64, input_dim=14, init='uniform'))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(Dropout(0.5))

# we can think of this chunk as the hidden layer    
model.add(Dense(64, init='uniform'))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(Dropout(0.5))

# we can think of this chunk as the output layer
model.add(Dense(2, init='uniform'))
model.add(BatchNormalization())
model.add(Activation('softmax'))

# setting up the optimization of our weights 
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='binary_crossentropy', optimizer=sgd)

# running the fitting
model.fit(X_train, y_train, nb_epoch=20, batch_size=16, show_accuracy=True, validation_split=0.2, verbose = 2)

希望这能使事情更清楚。



 类似资料:
  • 如果我想在Keras中使用BatchNormize函数,那么我需要在开始时只调用一次吗? 我阅读了以下文档:http://keras.io/layers/normalization/ 我不知道应该在哪里调用它。下面是我试图使用它的代码: 我这样问是因为如果我用第二行运行代码,包括批处理规范化,如果我不使用第二行运行代码,我会得到类似的输出。因此,要么我没有在正确的位置调用函数,要么我想这没有多大区

  • 问题内容: 我有一个plsql函数,我想从我的函数中调用另一个函数。我怎样才能做到这一点? 这是正确的方法吗? 问题答案: 函数必须返回一个值,否则您应该具有该函数的分配目标。

  • 问题内容: 我正在执行以下操作,但没有用 我正在调用一个返回游标的函数,所以我猜是问题所在 还有另一种方法吗? 问题答案: 我认为您的意思是参考光标。这是一个PL / SQL构造,用作指向查询返回的一组记录的指针。这意味着它必须由运行查询的客户端解释。例如,我们可以将Ref Cursor映射到JDBC或ODBC ResultSet。 您的基本声明当然没有错。这是一个类似于您自己的函数: 我可以在更

  • 我一直在学习一些关于如何创建会话对象的课程,效果很好,如果我把完整的代码放到一个PHP文件中,一切都很好! 我想做的是将其放在另一个模块(PHP文件)中,只需使用一行(或等效行)即可,例如

  • 问题内容: 我需要能够调用一个函数,以便运行代码以动态检索图像的来源。以下代码片段显示了我想要的示例: 我敢肯定这很简单,但是我在ng- src文档中 什么都找不到!还有其他人打过这个吗? 提前致谢! 指令(基于答案的示例) 其他人建议使用指令。我无法发布客户端代码,所以我写了一个简短的示例,说明了在plunker中的外观(请参见此处)。核心指令本身是: 我知道我有什么做为一个例子,很可能只是用在

  • 问题内容: 我已经在SQL中创建了一个函数,现在我需要在C#应用程序中使用该函数。 我尝试使用类似的方法,但由于得到以下内容,看来我做错了: …当我给出第一个参数和第二个参数时 这是我正在谈论的代码: 我的函数接受两个整数参数并返回一个表。我在Visual Studio中对其进行了检查,并且可以正常工作,但是无法在我的应用程序中正常工作。 这是我的函数声明: 问题答案: 您的SQL有点过时了,应该