
Folgendes Problem:
Wir speichern in einem Skript ein Objekt einer Klasse ab (ein Vektorquantisierer). Dann, in einem anderen Skript, welches im Allgemeinen auch auf einem anderen Rechner läuft (die Skripte laufen bei uns im Rechencluster), wird dieses Objekt wieder geladen.
Das Objekt hat, welches geladen wird, unterscheidet sich hin und wieder leicht vom abgespeicherten Objekt. Ich hege derzeit die Vermutung, dass es daran liegt, dass auf i.A. unterschiedlichen Computern gespeichert und geladen wird. Hier die relevanten Codezeilen:
Code: Alles auswählen
class VectorQuantizer(Quantizer):
def __init__(self, bits, dim):
Quantizer.__init__(self, bits)
self.n_init=5
self.algorithm = 'full'
self.kmeans = None
self.clusters = 2**bits
self.dim = dim
def encode(self, data):
code = self.kmeans.predict(data.astype(float))
return code
def decode(self, data):
data = data.astype(int)
dqdata = self.kmeans.cluster_centers_[data]
return dqdata
def train(self, data):
self.kmeans = MiniBatchKMeans(n_clusters=self.clusters, batch_size=1024)
self.kmeans.fit(data)
def getFlattenedWeights(self):
return self.kmeans.cluster_centers_.flatten()
def setWeights(self, weights):
cc = weights.reshape(self.clusters, self.dim)
self.kmeans.cluster_centers_ = cc
def load(self, savepath, name=''):
savename = 'vquant_' + str(self.bits) + name
with open(os.path.join(savepath, savename + '.pkl'), 'rb') as f:
tmp_dict = pickle.load(f)
self.__dict__.update(tmp_dict)
def save(self, savepath, name=''):
savename = 'vquant_' + str(self.bits) + name
with open(os.path.join(savepath, savename + '.pkl'), 'wb') as f:
pickle.dump(self.__dict__, f)
Ist das Abspeichern wie es hier vorgenommen wird zusammen mit der Ladefunktion robust gegenüber Wechsel des Computersystems?
Hatte jemand schon mal ein ähnliches Problem und hat ggf. Ideen worauf man schauen könnte?
Vielen Dank für jede Anregung
