繁体   English   中英

迁移到 Azure 机器学习工作室时,模型会产生不同的结果

[英]Models generate different results when moving to Azure Machine Learning Studio

我们在本地机器上开发了一个 Jupyter Notebook,用 Python (V3) 库sklearngensim训练模型。 当我们将random_state变量设置为固定的 integer 时,结果总是相同的。

在此之后,我们尝试将笔记本移动到 Azure 机器学习工作室(经典)中的工作区,但即使我们将random_state保持不变,结果也会有所不同。

正如以下链接中所建议的,我们安装了相同的库版本并检查了MKL版本是否相同,并且MKL_CBWR变量设置为AUTO

t-SNE 在不同的机器上产生不同的结果

Python代码相同,数据相同,不同机器上结果不同

尽管如此,我们仍然无法获得相同的结果。

我们还应该检查什么或为什么会发生这种情况?

更新

如果我们在本地机器上生成一个pkl文件,然后用AML导入,结果是一样的(就像这个pkl文件的本意一样)。

尽管如此,我们仍然希望在不导入 pkl 文件的情况下获得相同的结果(如果可能)。

库版本

gensim 3.8.3.
sklearn 0.19.2.
matplotlib 2.2.3.
numpy 1.17.2.
scipy 1.1.0.

代码

完整代码可以在这里找到,里面有示例数据链接。

import pandas as pd
import numpy as np
import matplotlib
from matplotlib import pyplot as plt

from gensim.models import KeyedVectors
%matplotlib inline

import time

from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
import seaborn as sns

wordvectors_file_vec = '../libraries/embeddings-new_large-general_3B_fasttext.vec'
wordvectors = KeyedVectors.load_word2vec_format(wordvectors_file_vec)

math_quests = # some transformations using wordvectors

df_subset = pd.DataFrame()

pca = PCA(n_components=3, random_state = 42)
pca_result = pca.fit_transform(mat_quests)
df_subset['pca-one'] = pca_result[:,0]
df_subset['pca-two'] = pca_result[:,1] 

time_start = time.time()
tsne = TSNE(n_components=2, verbose=1, perplexity=40, n_iter=300, random_state = 42)
tsne_results = tsne.fit_transform(mat_quests)

df_subset['tsne-2d-one'] = tsne_results[:,0]
df_subset['tsne-2d-two'] = tsne_results[:,1]

pca_50 = PCA(n_components=50, random_state = 42)
pca_result_50 = pca_50.fit_transform(mat_quests)
print('Cumulative explained variation for 50 principal components: {}'.format(np.sum(pca_50.explained_variance_ratio_)))

time_start = time.time()
tsne = TSNE(n_components=2, verbose=0, perplexity=40, n_iter=300, random_state = 42)
tsne_pca_results = tsne.fit_transform(pca_result_50)
print('t-SNE done! Time elapsed: {} seconds'.format(time.time()-time_start))

绝对同情你遇到的问题。 每个数据科学家都曾在某个时候为此苦苦挣扎。

我要告诉你的事实是,Azure ML Studio(经典)并不能真正解决这个“在我的机器上工作”的问题。 然而,好消息是 Azure ML 服务在这方面令人难以置信。 Studio classic 不允许您确定性地定义自定义环境,只能添加和删除包(即使那样也不是很好)

由于 ML Service 的执行建立在Docker容器和conda环境之上,您可以对重复结果更有信心。 我强烈建议您花时间学习它(我也很乐意调试出现的任何问题)。 Azure 的MachineLearningNotebooks 存储库有很多很棒的入门教程。

我花了两个小时制作概念证明,展示 ML Service 如何通过综合解决您遇到的问题:

我不是 T-SNE 专家,但是从下面的屏幕截图中可以看出,当我在本地和远程运行脚本时,t-sne 的输出是相同的。 Studio 经典版或许可以做到这一点,但很难保证它始终有效。

Azure ML 实验结果页面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM