首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras中输入数据的规范化

Keras中输入数据的规范化
EN

Stack Overflow用户
提问于 2019-04-30 16:00:11
回答 4查看 15K关注 0票数 11

DL中的一个常见任务是将输入样本规范化为零均值和单位方差。您可以使用如下代码“手动”执行规范化:

代码语言:javascript
复制
mean = np.mean(X, axis = 0)
std = np.std(X, axis = 0)
X = [(x - mean)/std for x in X]

但是,除了正在训练的Keras模型之外,还必须保持平均值和std值,以规范测试数据。既然平均值和std是可学习的参数,那么Keras也许可以学习它们吗?就像这样:

代码语言:javascript
复制
m = Sequential()
m.add(SomeKerasLayzerForNormalizing(...))
m.add(Conv2D(20, (5, 5), input_shape = (21, 100, 3), padding = 'valid'))
... rest of network
m.add(Dense(1, activation = 'sigmoid'))

我希望你能理解我的意思。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-05-05 17:57:06

添加BatchNormalization作为第一层,它按预期工作,尽管与OP的示例不完全一样。您可以看到详细的解释这里

OP的示例和批处理规范化都使用了在推理过程中输入数据的学习均值和标准差。但是OP的例子使用了一个简单的平均值,给每个训练样本相同的权重,而BatchNormalization层使用一个移动平均,它给最近看到的样本比旧的样本更多的权重。

重要的是,在培训期间,批处理规范化与OP示例的工作方式不同。在训练期间,该层使用当前一批输入的平均偏差和标准差来规范其输出。

第二个区别是OP的代码产生的输出平均值为零,标准差为1。相反,批归一化学习输出的均值和标准差,从而改善整个网络的损失。要获得OP示例的行为,应使用参数scale=Falsecenter=False初始化批处理规范化。

票数 5
EN

Stack Overflow用户

发布于 2020-10-22 23:53:16

现在有一个用于此目的的Keras层,Normalization。在编写时,它位于实验模块keras.layers.experimental.preprocessing中。

层/归一化/

在使用它之前,使用您想从其中派生出的数据adapt (即均值和标准差)调用图层的X方法。一旦你这样做,刻度是固定的(它不会在训练期间改变)。然后,无论何时使用模型(在训练和预测期间),都会将该比例应用于输入。

代码语言:javascript
复制
from keras.layers.experimental.preprocessing import Normalization

norm_layer = Normalization()
norm_layer.adapt(X)
model = keras.Sequential()
model.add(norm_layer)
# ... Continue as usual.
票数 5
EN

Stack Overflow用户

发布于 2019-04-30 16:06:02

也许您可以使用sklearn.preprocessing.StandardScaler来缩放您的数据,这个对象允许您保存对象中的缩放参数,然后您可以在模型中使用Mixin输入,让我们说:

  1. Your_model
  2. param1_scaler,param2_scaler

下面是一个链接https://www.pyimagesearch.com/2019/02/04/keras-multiple-inputs-and-mixed-data/

https://keras.io/getting-started/functional-api-guide/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55924789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档