Keras 的深度集成
项目描述
Keras 深度集成实现
这是 Lakshminarayanan 等人的实现。Keras 中的深度合奏论文。它创建了一组可以预测不确定性的模型。您提供一个输出两个值(均值、方差)的模型,该库将对您的数据进行集成和重新采样以进行集成训练。我们做了一些修改,将在即将发表的论文中更全面地描述。请不要独家新闻。
安装
pip install kdeepensemble
快速开始
此示例在函数内部创建 Keras 模型,然后对数据进行整形以进行集成训练。请注意,DeepEnsemble模型的行为就像 Keras 模型。
import kdens
import tensorflow as tf
# this is where you define your model
def make_model():
i = tf.keras.Input((None,))
x = tf.keras.layers.Dense(10, activation="relu")
mean = tf.keras.layers.Dense(1)(x)
# this activation makes our variance strictly positive
var = tf.keras.layers.Dense(1, activation='softplus')(x)
out = tf.squeeze(tf.stack([muhat, stdhat], axis=-1))
model = tf.keras.Model(inputs=inputs, outputs=out)
return model
# prepare data for ensemble training
resampled_idx = kdens.resample(y)
x_train = x[idx]
y_train = y[idx]
deep_ens = kdens.DeepEnsemble(make_model)
deep_ens.compile(loss=kdens.neg_ll)
deep_ens.fit(x_train, y_train)
deep_ens(x)
模型输出
输出是 shape (N, 3),其中最后一个轴是均值、方差和认知方差。认知方差来自模型的分歧,反映了模型的不确定性。方差包括认知方差和任意方差。它代表模型对不确定性的最佳估计。
保存/加载
您可以使用 序列化模型model.save,但请注意训练将无法继续。要继续训练,请使用load_weights和save_weights方法。
张量流数据集
您可以在使用map_reshapeTensorFlow 数据集时使用。它将如果您的数据已经批处理,请添加is_batched=True参数。
# data is a tf.data.Dataset
data = data.map(kdens.map_reshape()).batch(8)
deep_ens = kdens.DeepEnsemble(make_model)
deep_ens.compile(loss=kdens.neg_ll)
deep_ens.fit(data)
请注意,map_reshape不会重新采样,只是重塑。如果您想平衡标签,请考虑rejection_sample.
使用多个输入
该库确实支持具有多个输入的 Keras 模型,但具有以下限制:
- 输入必须是元组(不支持列表和字典)。
- 对抗步骤将仅在输入元组的第一个元素上完成。
这是一个例子
# make a model that takes three inputs as a tuple
x = np.random.randn(100, 10).astype(np.float32)
t = np.random.randn(100, 10, 3).astype(np.float32)
z = np.random.randn(100, 10, 3).astype(np.float32)
y = np.random.randn(100).astype(np.float32)
# can still use map_reshape with tuples
data = tf.data.Dataset.from_tensor_slices(
((x, t, z), y)).map(map_reshape()).batch(8)
def build():
xi = tf.keras.layers.Input(shape=(10,))
ti = tf.keras.layers.Input(shape=(10, 3))
zi = tf.keras.layers.Input(shape=(10, 3))
x = tf.keras.layers.Dense(2)(xi)
return tf.keras.Model(inputs=(xi, ti, zi), outputs=x)
deep_ens = kdens.DeepEnsemble(make_model)
deep_ens.compile(loss=kdens.neg_ll)
deep_ens.fit(data, epochs=2)
deep_ens.evaluate((x, t, z), y)
API
引文
深度合奏论文:
@article{lakshminarayanan2017simple,
title={Simple and scalable predictive uncertainty estimation using deep ensembles},
author={Lakshminarayanan, Balaji and Pritzel, Alexander and Blundell, Charles},
journal={Advances in neural information processing systems},
volume={30},
year={2017}
}
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
kdeepsemble-0.3.2.tar.gz
(7.5 kB
查看哈希)
内置分布
kdeepensemble-0.3.2-py3-none-any.whl
(8.1 kB
查看哈希)
关
kdeepsemble -0.3.2.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 2eea9f542ad9bd6e903fed1bffda94978795275d7a423ee8e13ff2ecbd2a5398 |
|
| MD5 | 5acef60b18f98c60b4b2ea5d6f7909b2 |
|
| 布莱克2-256 | 1f56f6e9a9993a67e254335e92ecbacaaaa6c3c1289e809f806ddfc37266e493 |
关
kdeepensemble -0.3.2-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 97211aab2c7fab6a33afcb74d9ff064c9c45bef52bb7dba0f24232b832943607 |
|
| MD5 | 1644ceadda5e5b841deaf0a937fecd90 |
|
| 布莱克2-256 | efd050e520cebe3b22baeff22758e18b438c307b06d007948989c226591599df |