Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 为什么Deep Ensembling不能在Tensorflow2中使用我的代码?_Python 3.x_Tensorflow2.0_Keras 2_Dropout - Fatal编程技术网

Python 3.x 为什么Deep Ensembling不能在Tensorflow2中使用我的代码?

Python 3.x 为什么Deep Ensembling不能在Tensorflow2中使用我的代码?,python-3.x,tensorflow2.0,keras-2,dropout,Python 3.x,Tensorflow2.0,Keras 2,Dropout,深度融合是一种获得不确定性估计的技术,它通过多次训练同一模型(每次都使用不同的随机初始化),然后使用同一模型的不同版本进行预测。本文介绍了这种方法: 我正试图用一个玩具问题和人工数据把这个想法付诸实践。我得到的反馈是,就集成捕获数据中不确定性的能力而言,性能非常差。我可能做错了什么 这是我的密码: # Create and plot 5000 data points x = np.linspace(-1, 2, 5000)[:, np.newaxis] y = np.power(x, 3)

深度融合是一种获得不确定性估计的技术,它通过多次训练同一模型(每次都使用不同的随机初始化),然后使用同一模型的不同版本进行预测。本文介绍了这种方法:

我正试图用一个玩具问题和人工数据把这个想法付诸实践。我得到的反馈是,就集成捕获数据中不确定性的能力而言,性能非常差。我可能做错了什么

这是我的密码:

# Create and plot 5000 data points

x = np.linspace(-1, 2, 5000)[:, np.newaxis]
y = np.power(x, 3) + 0.1*(2 + x)*np.random.randn(5000)[:, np.newaxis]

plt.scatter(x, y, alpha=0.1)
plt.show()

x_train = x[: 4000, :]
x_test = x[4000 :, :]

y_train = y[: 4000, :]
y_test = y[4000 :, :]

dense1 = 2**9
dense2 = 2**8
dense3 = 2**7
dropout1 = 0.2
dropout2 = 0.2
dropout3 = 0.5

import random
models = []


for i in tqdm(range(100)):
    
    random.seed(i)
    
    seed = np.random.randint(1, 1000)
    
   
    
    x_in = Input(shape = (1, ))

    x = Dense(dense1, activation = 'relu', kernel_initializer = tf.keras.initializers.GlorotNormal(seed= seed))(x_in)

    x = Dropout(dropout1, seed = seed + 1)(x)

    x = Dense(dense2, activation = 'relu', kernel_initializer = tf.keras.initializers.GlorotNormal(seed= seed + 2))(x)

    x = Dropout(dropout2, seed = seed + 3)(x)

    x = Dense(dense3, activation = 'relu', kernel_initializer = tf.keras.initializers.GlorotNormal(seed= seed + 4))(x)

    x = Dropout(dropout3, seed = seed + 5)(x)

    y_out = Dense(1, kernel_initializer = tf.keras.initializers.GlorotNormal(seed= seed + 6))(x)

    model = Model(inputs = x_in, outputs = y_out)

    callback = tf.keras.callbacks.EarlyStopping(
        monitor="val_loss",

        patience= 7,

        restore_best_weights=False,
    )

    model.compile(
        loss = tf.keras.losses.MeanSquaredError(),
        optimizer= tf.keras.optimizers.Adam(),
        metrics=[tf.keras.metrics.MeanAbsolutePercentageError()]
    )

    model.fit(x_train, y_train, validation_split = 0.2, callbacks = [callback], epochs = 1000, verbose = 0 )
    
    models.append(model)

preds_train = []
preds_test = []

for model in tqdm(models):
    
    for i in range(100):
    
        pred_train = model.predict(x_train)

        pred_test = model.predict(x_test)

        preds_train.append(pred_train)

        preds_test.append(pred_test)

preds_train = np.hstack(preds_train)

preds_test = np.hstack(preds_test)

train_q50 = pd.DataFrame(preds_train).quantile(0.5, axis = 1)
train_q95 = pd.DataFrame(preds_train).quantile(0.95, axis = 1)
train_q05 = pd.DataFrame(preds_train).quantile(0.05, axis = 1)
train_q99 = pd.DataFrame(preds_train).quantile(0.99, axis = 1)
train_q01 = pd.DataFrame(preds_train).quantile(0.01, axis = 1)

train_q995 = pd.DataFrame(preds_train).quantile(0.995, axis = 1)
train_q005 = pd.DataFrame(preds_train).quantile(0.005, axis = 1)

fig, ax = plt.subplots()
ax.scatter(x_train, y_train, color = 'blue', alpha = 0.1)
ax.plot(x_train, train_q50.values, color = 'red', lw = 3)
ax.plot(x_train, train_q95.values, color = '#014636', lw = 3)
ax.plot(x_train, train_q05.values, color = '#081d58', lw = 3)
ax.plot(x_train, train_q99.values, color = '#800026', lw = 3)
ax.plot(x_train, train_q01.values, color = '#993404', lw = 3)
ax.plot(x_train, train_q995.values, color = '#a50f15', lw = 3)
ax.plot(x_train, train_q005.values, color = '#016c59', lw = 3)
plt.show()