Pkl फाइल को कैसे अनपैक करें?


83

मेरे पास MNIST डेटासेट से एक pkl फ़ाइल है, जिसमें हस्तलिखित अंकों की छवियां हैं।

मैं उन अंकों की छवियों में से प्रत्येक पर एक नज़र रखना चाहता हूं, इसलिए मुझे pkl फ़ाइल को अनपैक करने की आवश्यकता है, सिवाय इसके कि मैं कैसे पता नहीं लगा सकता।

वहाँ एक तरीका है खोलना / खोलना pkl फ़ाइल?

जवाबों:


160

आम तौर पर

आपकी pklफ़ाइल वास्तव में, एक क्रमबद्ध pickleफ़ाइल है, जिसका अर्थ है कि इसे पायथन के pickleमॉड्यूल का उपयोग करके डंप किया गया है ।

आपके द्वारा लिए जा सकने वाले डेटा को अन-अचार करने के लिए:

import pickle


with open('serialized.pkl', 'rb') as f:
    data = pickle.load(f)

MNIST डेटा सेट के लिए

gzipयदि फ़ाइल संपीड़ित है तो नोट की आवश्यकता है:

import gzip
import pickle


with gzip.open('mnist.pkl.gz', 'rb') as f:
    train_set, valid_set, test_set = pickle.load(f)

जहां प्रत्येक सेट को और विभाजित किया जा सकता है (यानी प्रशिक्षण सेट के लिए):

train_x, train_y = train_set

वे आपके सेट के इनपुट (अंक) और आउटपुट (लेबल) होंगे।

यदि आप अंक प्रदर्शित करना चाहते हैं:

import matplotlib.cm as cm
import matplotlib.pyplot as plt


plt.imshow(train_x[0].reshape((28, 28)), cmap=cm.Greys_r)
plt.show()

mnist_digit

अन्य विकल्प मूल डेटा को देखना होगा:

http://yann.lecun.com/exdb/mnist/

लेकिन यह कठिन होगा, क्योंकि आपको उन फाइलों में बाइनरी डेटा पढ़ने के लिए एक प्रोग्राम बनाने की आवश्यकता होगी। इसलिए मैं आपको पायथन का उपयोग करने और डेटा को लोड करने की सलाह देता हूं pickle। जैसा कि आपने देखा है, यह बहुत आसान है। ;-)


क्या छवि फ़ाइलों में से एक pkl फ़ाइल बनाने का एक तरीका है जो मेरे पास है?
ytrewq

सादा-पुराना अचार हो सकता है, है ना? के रूप में cPickled का विरोध किया? मुझे MNIST डेटासेट के बारे में निश्चित नहीं है, लेकिन pklसामान्य रूप से फ़ाइलों के लिए, अनपैकिंग के लिए pickle.loadकाम करता है - हालांकि मुझे लगता है कि यह इससे कम अच्छा प्रदर्शन करता है cPickle.loadpklछोटी तरफ की फ़ाइलों के लिए , प्रदर्शन अंतर ध्यान देने योग्य नहीं है।
22

यह भी याद रखें कि, डिफ़ॉल्ट रूप से, openफ़ंक्शन में मोड का डिफ़ॉल्ट मान सेट r(पढ़ा) होता है, इसलिए rbमोड के साथ फ़ाइल खोलने के बारे में यह महत्वपूर्ण है। यदि b(बाइनरी) मोड नहीं जोड़ा गया है, तो अनप्लिकिंग का परिणाम हो सकता है UnicodeDecodeError
टॉमस बर्टकोविआक

7

आसान एक लाइनर

pkl() (
  python -c 'import pickle,sys;d=pickle.load(open(sys.argv[1],"rb"));print(d)' "$1"
)
pkl my.pkl

__str__अचार वाली वस्तु के लिए प्रिंट करेंगे ।

किसी वस्तु की कल्पना करने की सामान्य समस्या बेशक अपरिभाषित है, इसलिए यदि __str__यह पर्याप्त नहीं है, तो आपको एक कस्टम स्क्रिप्ट की आवश्यकता होगी।


2

यदि आप मूल MNIST फ़ाइलों के साथ काम करना चाहते हैं, तो यहां बताया गया है कि आप उनका उपयोग कैसे कर सकते हैं।

यदि आपने अभी तक फ़ाइलें डाउनलोड नहीं की हैं, तो टर्मिनल में निम्नलिखित को चलाकर पहले ऐसा करें:

wget http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
wget http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
wget http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
wget http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz

इसके बाद निम्न को सहेजें deserialize.pyऔर इसे चलाएं।

import numpy as np
import gzip

IMG_DIM = 28

def decode_image_file(fname):
    result = []
    n_bytes_per_img = IMG_DIM*IMG_DIM

    with gzip.open(fname, 'rb') as f:
        bytes_ = f.read()
        data = bytes_[16:]

        if len(data) % n_bytes_per_img != 0:
            raise Exception('Something wrong with the file')

        result = np.frombuffer(data, dtype=np.uint8).reshape(
            len(bytes_)//n_bytes_per_img, n_bytes_per_img)

    return result

def decode_label_file(fname):
    result = []

    with gzip.open(fname, 'rb') as f:
        bytes_ = f.read()
        data = bytes_[8:]

        result = np.frombuffer(data, dtype=np.uint8)

    return result

train_images = decode_image_file('train-images-idx3-ubyte.gz')
train_labels = decode_label_file('train-labels-idx1-ubyte.gz')

test_images = decode_image_file('t10k-images-idx3-ubyte.gz')
test_labels = decode_label_file('t10k-labels-idx1-ubyte.gz')

स्क्रिप्ट पिक फ़ाइल में पिक्सेल मानों को सामान्य नहीं करता है। ऐसा करने के लिए, आपको बस इतना करना है

train_images = train_images/255
test_images = test_images/255

1

अचार (और gzip यदि फ़ाइल संकुचित है) मॉड्यूल की जरूरत प्रयोग की जाने वाली

नोट: ये पहले से ही मानक पायथन लाइब्रेरी में हैं। कुछ भी नया स्थापित करने की आवश्यकता नहीं है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.