Verwenden Sie Dill, um den Datensatz/DataLoader zu speichern und zu laden

Originaltext: https://mp.weixin.qq.com/s/TStrHMbgDjPIsXaPK6-VSQ

1 Dill Einführung

pickle/dillEs kann zum Speichern der meisten Python-Datenformate wie Objekte verwendet werden. Pickle kann keine lambdaFunktionen, serialisierten Objekte usw. speichern, aber dilles kann gespeichert werden.

Die Verwendung von Gurke und Dill ist gleich.

Dill-Eigenschaften:

1) Folgende Standardsorten können gebeizt werden

  • none, type, bool, int, long, float, complex, str, unicode,
  • Tupel, Liste, Diktat, Datei, Puffer, integriert,
  • sowohl alte als auch neue Stilklassen,
  • Instanzen alter und neuer Stilklassen,
  • Set, Frozenset, Array, Funktionen, Ausnahmen

2) Sie können auch einige einzigartige Sorten einlegen

  • Funktionen mit Erträgen, verschachtelten Funktionen, Lambdas,
  • Zelle, Methode, ungebundene Methode, Modul, Code, Methodenwrapper,
  • dictproxy, methoddescriptor, getsetdescriptor, memberdescriptor,
  • Wrapperdeskriptor, Xrange, Slice,
  • nicht implementiert, Auslassungspunkte, beenden

3) Folgende Sorten können jedoch vorerst nicht gebeizt werden:

  • Rahmen, Generator, Traceback

4) Weitere Funktionen von Dill

  • Speichern und laden Sie Python-Interpreter-Sitzungen
  • Speichern und extrahieren Sie den Quellcode aus Funktionen und Klassen
  • Beizfehler interaktiv diagnostizieren

Als nächstes stellen wir verschiedene Verwendungsmöglichkeiten von Dill vor.

2 Anonyme Funktion speichern

# !pip install dill
import dill

# 保存匿名函数
squared = lambda x: x**2
dill.loads(dill.dumps(squared))(3)

# 9

3 Quellcode anzeigen

# 保存源码
import dill.source
print(dill.source.getsource(squared))

Melden Sie es in ipython OSError: could not extract source codeund ändern Sie es in die folgende Form:

code=dill.source.getsource(dill.detect.code(squared))
print(code)

# squared = lambda x: x**2

4 Speichern Sie den Klassendatensatz, DataLoader

Dies beschleunigt die Datenvorverarbeitung.

# 保存class
from torch.utils.data import TensorDataset, DataLoader
import torch
from sklearn.datasets import make_classification

data, target = make_classification()
# data.shape, target.shape
# ((100, 20), (100,))

batch_size=10
dataset = TensorDataset(torch.from_numpy(data), torch.from_numpy(target))
dataloader = DataLoader(dataset, shuffle=False, drop_last=True, batch_size=batch_size)

Daten speichern:

dill.dump(dataset, './dataset_save.pkl')
dill.dump(dataloader, './dataloader_save.pkl')

Direktes Speichern führt zu einem Fehler:TypeError: file must have a 'write' attribute

Speichern Sie es einfach wie folgt:

with open('./dataset_save.pkl','wb') as f:
    dill.dump(dataset, f)

with open('./dataloader_save.pkl','wb') as f:
    dill.dump(dataloader, f)

Daten herunterladen:

with open('./dataset_save.pkl','rb') as f:
    dataset_save = dill.load(f)

with open('./dataloader_save.pkl','rb') as f:
    dataloader_save = dill.load(f)

Datenvergleich:

x, y = next(iter(dataloader))
x_save, y_save = next(iter(dataloader_save))
torch.equal(x, x_save), torch.equal(y, y_save)
# (True, True)

Supongo que te gusta

Origin blog.csdn.net/mengjizhiyou/article/details/127251705
Recomendado
Clasificación