簡體   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