我正在使用sklearn AffinityPropagation聚类算法。我的四核计算机上的聚类算法输出与典型服务器计算机上生成的输出有所不同。有人可以建议任何方法,以便在两个系统上获得相似的输出。
我在两台机器上都使用了相似的特征向量。
我的机器上的输出是cluster0:[1,2,3],cluster1:[4,5,6],但是在服务器上它的输出是cluster0:[1,2] cluster1:[3,4],cluster2:[5 ]
from keras.applications.xception import Xception
from keras.preprocessing import image
from keras.applications.xception import preprocess_input
from keras.models import Model
from sklearn.cluster import AffinityPropagation
import cv2
import glob
base_model = Xception(weights = model_path)
base_model=Model(inputs=base_model.input,outputs=base_model.get_layer('avg_pool').output)
files = glob.glob("*.jpg")
image_vector = []
for f in files:
image = cv2.imread(f)
temp_vector = base_model.predict(image)
image_vector.append(temp_vector)
import numpy as np
image_vector = np.asarray(image_vector)
clustering = AffinityPropagation()
clustering.fit(image_vector)
包装:- scikit学习0.20.3 sklearn 0.0 张量流1.12.0 keras 2.2.4 opencv-python
机器1:-4核心8GB RAM 机器2:-7核心16GB RAM
答案 0 :(得分:0)
运行不确定的算法时,不同机器上的结果可能会有所不同。
我建议您修复numpy的随机种子和Python的随机种子,如果您希望能够在此类算法的机器上重现结果。
Python随机种子可以通过使用random.seed(42)
(或任何其他整数)来固定
块状随机种子可以用np.random.seed(12345)
(或任何其他整数)固定
sklearn和Keras使用numpy随机数生成器,因此第二个选择本身可以解决您的问题。
此答案假设两个系统上的所有库版本均相同。