Saya mencoba menerapkan contoh klasifikasi biner menggunakan kumpulan data IMDb di Google Colab . Saya telah menerapkan model ini sebelumnya. Tetapi ketika saya mencoba melakukannya lagi setelah beberapa hari, itu mengembalikan kesalahan nilai: 'Larik objek tidak dapat dimuat ketika allow_pickle = False' untuk fungsi load_data ().
Saya sudah mencoba memecahkan ini, mengacu pada jawaban yang ada untuk masalah serupa: Bagaimana memperbaiki 'Larik objek tidak dapat dimuat ketika allow_pickle = False' dalam algoritma sketch_rnn Tetapi ternyata hanya menambahkan argumen allow_pickle saja tidak cukup.
Kode saya:
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
Kesalahannya:
ValueError Traceback (most recent call last)
<ipython-input-1-2ab3902db485> in <module>()
1 from keras.datasets import imdb
----> 2 (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
2 frames
/usr/local/lib/python3.6/dist-packages/keras/datasets/imdb.py in load_data(path, num_words, skip_top, maxlen, seed, start_char, oov_char, index_from, **kwargs)
57 file_hash='599dadb1135973df5b59232a0e9a887c')
58 with np.load(path) as f:
---> 59 x_train, labels_train = f['x_train'], f['y_train']
60 x_test, labels_test = f['x_test'], f['y_test']
61
/usr/local/lib/python3.6/dist-packages/numpy/lib/npyio.py in __getitem__(self, key)
260 return format.read_array(bytes,
261 allow_pickle=self.allow_pickle,
--> 262 pickle_kwargs=self.pickle_kwargs)
263 else:
264 return self.zip.read(key)
/usr/local/lib/python3.6/dist-packages/numpy/lib/format.py in read_array(fp, allow_pickle, pickle_kwargs)
690 # The array contained Python objects. We need to unpickle the data.
691 if not allow_pickle:
--> 692 raise ValueError("Object arrays cannot be loaded when "
693 "allow_pickle=False")
694 if pickle_kwargs is None:
ValueError: Object arrays cannot be loaded when allow_pickle=False
np.load(path)
, sekarang secaranp.load(path, boolean)
default, boolean (allow_pickle) salahnp.savez
dokumen tetapi tidak ada referensi untuk pengawetan jadi saya tidak tahu bagaimana bahkan tahu di tempat pertama bahwa hal-hal yang saya simpan adalah barang Pytorch dan tidak hanya numpy ... aneh! Jika Anda tahu apa yang terjadi, bagikan dengan kami :)Jawaban:
Berikut adalah trik untuk memaksa
imdb.load_data
agar acar masuk, di buku catatan Anda, mengganti baris ini:dengan ini:
sumber
TypeError: <lambda>() got multiple values for keyword argument 'allow_pickle'
Masalah ini masih menjadi masalah keras git. Saya berharap ini diselesaikan secepat mungkin. Sementara itu, coba turunkan versi numpy Anda ke 1.16.2. Tampaknya menyelesaikan masalah.
Versi numpy ini memiliki nilai default
allow_pickle
sebagaiTrue
.sumber
Mengikuti masalah ini di GitHub, solusi resminya adalah mengedit file imdb.py. Perbaikan ini bekerja dengan baik untuk saya tanpa perlu menurunkan versi numpy. Temukan file imdb.py di
tensorflow/python/keras/datasets/imdb.py
(jalur lengkap untuk saya adalah:C:\Anaconda\Lib\site-packages\tensorflow\python\keras\datasets\imdb.py
- pemasangan lain akan berbeda) dan ubah baris 85 sesuai perbedaannya:Alasan perubahan tersebut adalah keamanan untuk mencegah Python yang setara dengan injeksi SQL dalam file acar. Perubahan di atas HANYA akan mempengaruhi data imdb dan oleh karena itu Anda mempertahankan keamanan di tempat lain (dengan tidak menurunkan numpy).
sumber
Saya baru saja menggunakan allow_pickle = True sebagai argumen untuk np.load () dan itu berhasil untuk saya.
sumber
Dalam kasus saya bekerja dengan:
sumber
Saya pikir jawaban dari cheez ( https://stackoverflow.com/users/122933/cheez ) adalah yang termudah dan paling efektif. Saya akan menguraikan sedikit di atasnya sehingga tidak akan mengubah fungsi numpy untuk seluruh periode sesi.
Saran saya ada di bawah. Saya menggunakannya untuk mengunduh set data komputer dari keras yang menunjukkan jenis kesalahan yang sama:
sumber
Anda dapat mencoba mengubah nilai bendera
sumber
tidak ada solusi yang tercantum di atas yang berhasil untuk saya: saya menjalankan anaconda dengan python 3.7.3. Apa yang berhasil bagi saya adalah
jalankan "conda install numpy == 1.16.1" dari Anaconda PowerShell
tutup dan buka kembali buku catatan
sumber
allow_pickle=True
nilai default.pada notebook jupyter menggunakan
berfungsi dengan baik, tetapi masalah muncul ketika Anda menggunakan metode ini di spyder (Anda harus me-restart kernel setiap saat atau Anda akan mendapatkan kesalahan seperti:
Saya memecahkan masalah ini menggunakan solusi di sini :
sumber
Saya mendarat di sini, mencoba cara Anda dan tidak tahu.
Saya sebenarnya sedang mengerjakan kode yang telah diberikan sebelumnya
digunakan jadi saya menggantinya dengan
sumber
Ya, menginstal versi sebelumnya dari numpy menyelesaikan masalah.
Bagi mereka yang menggunakan PyCharm IDE:
di IDE saya (Pycharm), File-> Settings-> Project Interpreter: Saya menemukan numpy saya menjadi 1.16.3, jadi saya kembali ke 1.16.1. Klik + dan ketik numpy di pencarian, centang "tentukan versi": 1.16.1 dan pilih -> instal paket.
sumber
temukan jalur ke imdb.py lalu tambahkan saja bendera ke np.load (jalur, ... bendera ...)
sumber
Ini berhasil untuk saya
sumber
Apa yang saya temukan adalah bahwa TensorFlow 2.0 (saya menggunakan 2.0.0-alpha0) tidak kompatibel dengan versi terbaru Numpy yaitu v1.17.0 (dan mungkin v1.16.5 +). Segera setelah TF2 diimpor, itu melontarkan daftar besar FutureWarning, yang terlihat seperti ini:
Ini juga mengakibatkan error allow_pickle saat mencoba memuat set data imdb dari keras
Saya mencoba menggunakan solusi berikut yang berfungsi dengan baik, tetapi saya harus melakukannya setiap proyek di mana saya mengimpor TF2 atau tf.keras.
Solusi termudah yang saya temukan adalah menginstal numpy 1.16.1 secara global, atau menggunakan versi tensorflow dan numpy yang kompatibel di lingkungan virtual.
Tujuan saya dengan jawaban ini adalah untuk menunjukkan bahwa ini bukan hanya masalah dengan imdb.load_data, tetapi masalah yang lebih besar disebabkan oleh ketidakcocokan versi TF2 dan Numpy dan dapat mengakibatkan banyak bug atau masalah tersembunyi lainnya.
sumber
Tensorflow memiliki perbaikan dalam versi tf-nightly.
Versi saat ini adalah '2.0.0-dev20190511'.
sumber
The jawaban @cheez kadang-kadang tidak bekerja dan rekursif memanggil fungsi lagi dan lagi. Untuk mengatasi masalah ini Anda harus menyalin fungsinya secara mendalam. Anda dapat melakukan ini dengan menggunakan fungsi tersebut
partial
, jadi kode akhirnya adalah:sumber
Saya biasanya tidak memposting ke hal-hal ini tetapi ini sangat mengganggu. Kebingungan berasal dari fakta bahwa beberapa
imdb.py
file Keras telah diperbarui:ke versi dengan
allow_pickle=True
. Pastikan periksa file imdb.py untuk melihat apakah perubahan ini sudah diterapkan. Jika sudah disesuaikan, berikut ini berfungsi dengan baik:sumber
Cara termudah adalah dengan mengubah
imdb.py
pengaturanallow_pickle=True
kenp.load
baris di manaimdb.py
kesalahan melempar.sumber