Machine learning sklearn群集输出是否因机器而异?

Machine learning sklearn群集输出是否因机器而异?,machine-learning,scikit-learn,Machine Learning,Scikit Learn,我正在使用sklearn仿射投影聚类算法。我的4核机器上集群算法的输出与典型服务器机器上生成的结果不同。有没有人能建议一些方法,这样我就可以在两个系统上获得相似的输出 我在两台机器上使用了相似的特征向量 我的计算机上的输出是cluster0:[1,2,3],cluster1:[4,5,6],但在服务器上的输出是cluster0:[1,2]cluster1:[3,4],cluster2:[5] 来自keras.applications.exception导入exception 从keras.pre

我正在使用sklearn仿射投影聚类算法。我的4核机器上集群算法的输出与典型服务器机器上生成的结果不同。有没有人能建议一些方法,这样我就可以在两个系统上获得相似的输出

我在两台机器上使用了相似的特征向量

我的计算机上的输出是cluster0:[1,2,3],cluster1:[4,5,6],但在服务器上的输出是cluster0:[1,2]cluster1:[3,4],cluster2:[5]

来自keras.applications.exception导入exception
从keras.preprocessing导入图像
从keras.applications.exception导入预处理\u输入
从keras.models导入模型
从sklearn.cluster导入AffinityPropagation
进口cv2
导入glob
基本模型=例外(权重=模型路径)
基本模型=模型(输入=基本模型。输入,输出=基本模型。获取层(“平均池”)。输出)
files=glob.glob(“*.jpg”)
图像_向量=[]
对于文件中的f:
图像=cv2.imread(f)
温度向量=基本模型预测(图)
图像向量追加(临时向量)
将numpy作为np导入
image\u vector=np.asarray(image\u vector)
聚类=亲缘传播()
聚类.fit(图像向量)
套餐:- scikit学习0.20.3 sklearn 0.0 tensorflow 1.12.0 keras 2.2.4 opencv python

机器1:-4芯8GB RAM
机器2:-7核16GB RAM

当运行不确定的算法时,不同机器上的结果可能不同

我建议您修复numpy的随机种子和Python的随机种子,如果您希望能够跨机器复制此类算法的结果

Python随机种子可以通过使用:
random.seed(42)
(或任何其他整数)来修复

Numpy random seed可以通过以下方式固定:
np.random.seed(12345)
(或任何其他整数)

sklearn和Keras使用numpy随机数生成器,因此第二个选项本身可以解决您的问题


这个答案假设两个系统上的所有库版本都相同。

当运行不确定的算法时,不同机器上的结果可能不同

我建议您修复numpy的随机种子和Python的随机种子,如果您希望能够跨机器复制此类算法的结果

Python随机种子可以通过使用:
random.seed(42)
(或任何其他整数)来修复

Numpy random seed可以通过以下方式固定:
np.random.seed(12345)
(或任何其他整数)

sklearn和Keras使用numpy随机数生成器,因此第二个选项本身可以解决您的问题


此答案假设两个系统上的所有库版本都相同。

欢迎使用SO。任何人都不可能用你实际提供的几乎为零的信息来帮助你;请花点时间阅读并回答“你好”。谢谢你的回复。你能告诉我更多的信息能帮助你更好地理解这个问题吗。Thanks@etherjain你的软件包版本,你的硬件,所有能帮助我们复制的数据problem@Vladimir感谢您提供所需的详细信息。欢迎访问SO。任何人都不可能用你实际提供的几乎为零的信息来帮助你;请花点时间阅读并回答“你好”。谢谢你的回复。你能告诉我更多的信息能帮助你更好地理解这个问题吗。Thanks@etherjain你的软件包版本,你的硬件,所有能帮助我们复制的数据problem@Vladimir感谢您提供所需的详细信息。设置np.random.seed()没有帮助。我确信库版本与我在两个系统中使用的conda环境相同。@etherjain您是否使用GPU来训练您的模型?这可能会带来一些随机性。Keras使用numpy随机数生成器,sklearn也是如此,所以修复种子应该可以使结果重现。我不是在GPU上训练。它都是基于CPU的。除了clustering.fit()函数外,不需要任何培训。仔细观察,我发现生成的两个亲和矩阵都是不同的。不确定为什么会发生这种情况。设置np.random.seed()没有帮助。我确信库版本与我在两个系统中使用的conda环境相同。@etherjain您是否使用GPU来训练您的模型?这可能会带来一些随机性。Keras使用numpy随机数生成器,sklearn也是如此,所以修复种子应该可以使结果重现。我不是在GPU上训练。它都是基于CPU的。除了clustering.fit()函数外,不需要任何培训。仔细观察,我发现生成的两个亲和矩阵都是不同的。不知道为什么会这样。