python - 学习率、动量和准确度的 3D 图

标签 python matplotlib machine-learning neural-network keras

我有一个在 Keras 中训练过的基本神经网络。我正在研究学习率和动量项的影响,我想绘制一个漂亮的 3D 图表来可视化学习率和动量对准确性的影响。

我已经成功地使用示例代码绘制了 trisurf 图,但是每当我使用自己的数据时,我都会遇到错误。这些示例似乎使用了大约 1000 个值的 numpy 数组,而我只有大约 6 个不同的学习率和动量值,给了我大小为 6、6 和 36 的 numpy 数组。当我尝试使用这些值绘制图表时,我得到出现以下错误:

RuntimeError: Error in qhull Delaunay triangulation calculation: singular input data (exitcode=2)

我不明白这个错误消息,也不明白为什么它适用于示例数据,但不适用于我自己的数据。有什么建议吗?

我的代码如下:

momentum_terms = np.array([0.00001,0.0001,0.001,0.01, 0.1, 1])
learning_rates = np.array([0.00001,0.0001,0.001,0.01, 0.1, 1])
train_accuracies = np.empty([36])
test_accuracies = np.empty([36])
for learning_rate in learning_rates:
    for momentum in momentum_terms:
        model = Sequential()
        model.add(Dense(18, activation='relu', input_shape = (2,)))
        model.add(Dense(18, activation='relu'))
        model.add(Dense(1, activation='sigmoid'))
        model.summary()

        model.compile(loss='binary_crossentropy',
                      optimizer=SGD(lr = learning_rate, momentum = momentum),
                      metrics=[binary_accuracy])

        history = model.fit(x_train, y_train,
                            batch_size=batch_size,
                            epochs=epochs,
                            verbose=1,
                            validation_data=(x_test, y_test))
        score = model.evaluate(x_test, y_test, verbose=0)
        np.append(train_accuracies, history.history['binary_accuracy'][-1] * 100)
        np.append(test_accuracies, history.history['val_binary_accuracy'][-1] * 100)

x = momentum_terms
y = learning_rates
z = test_accuracies

ax = plt.axes(projection='3d')
ax.plot_trisurf(x, y, z, cmap='viridis', edgecolor='none');
plt.show()

最佳答案

您没有提供足够的数据来生成 3d 绘图 ( see this related SO question )。您需要传递 36、36 和 36,而不是传递 6、6 和 36。重做您的代码,以便您准确地将每对动量项和学习率项存储在循环中。

所以你应该:

x = [0.00001, 0.00001, 0.00001, 0.00001, 0.00001, 0.00001, 0.0001, 0.0001, .... ] 学习率选择总共 36 个值

y = [0.00001,0.0001,0.001,0.01, 0.1, 1, 0.00001, 0.0001,0.001,0.01, 0.1, 1, .... ] 动量选择总共 36 个值

z = 上述每个组合的 36 个精度数组

关于python - 学习率、动量和准确度的 3D 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49311863/

相关文章:

python - PyQt5 中的 Matplotlib : How to remove the small space along the edge

python - 如何将人物传奇带到前面?

machine-learning - 预测分析-“为什么”因素和模型的可解释性

python - 使用日期时间和使用 python 操作日期字符串

python - 尝试从Morningstar下载股票价格数据时出错

python - 如何在一种情况下将数据拆分为 Pandas 中的多行?

svg - jupyter笔记本内联绘图为svg

tensorflow - SQuAD 挑战中的 EM 分数

c++ - 如何使用 AdaBoost 进行特征选择?

Python Dataframe.resample() 从 datetimeindex 中删除时间