Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Проблема с numpy PYTHON

Илья Калия Ученик (166), открыт 3 недели назад
Код первого файла main:
import numpy as np
import matplotlib as plt

import utils

image, labels = utils.load_dataset()

weights_input_to_hidden = np.random.uniform(-0.5,0.5,(20,784))
weights_hidden_to_output = np.random.uniform(-0.5,0.5,(10,20))
bias_input_to_hidden = np.zeros((20,1))
bias_hidden_to_output =np.zeros((10,1))

код второго файла utils:
import numpy as np
def load_dataset():
with np.load("mnist.npz") as f:
x_train = f['x_train'].astype("float32") / 255
x_train = np.reshape(x_train,(x_train.shape[0],x_train.shape[1]))
y_train = f['y_train']
y_train = np.eye(10)[y_train]
return x_train, y_train

Ошибка в первом main файле:
Traceback (most recent call last):
File "F:\disc c\Проекты пайтон\ииОпределениеЧисел\main.py", line 6, in <module>
image, labels = utils.load_dataset()
File "F:\disc c\Проекты пайтон\ииОпределениеЧисел\utils.py", line 4, in load_dataset
x_train = f['x_train'].astype("float32") / 255
File "F:\disc c\Проекты пайтон\ииОпределениеЧисел\.venv\lib\site-packages\numpy\lib\_npyio_impl.py", line 261, in __getitem__
raise KeyError(f"{key} is not a file in the archive")
KeyError: 'x_train is not a file in the archive'
2 ответа
Анатолий Зяблин Просветленный (37878) 3 недели назад
Ошибка возникает из-за того, что в вашем файле `mnist.npz` отсутствуют ключи `'x_train'` и `'y_train'`. Вероятно, файл был сохранен с другими названиями массивов. Вот как это исправить:

1. Проверьте ключи в файле mnist.npz:
Измените функцию `load_dataset()` в `utils.py`, чтобы увидеть доступные ключи:
 def load_dataset(): 
with np.load("mnist.npz") as f:
print("Ключи в файле:", f.files) # Добавьте эту строку
x_train = f['x_train'].astype("float32") / 255
...

2. Если ключи отличаются (например, `'arr_0', 'arr_1'`):
Исправьте код в `utils.py`, используя правильные ключи:
 def load_dataset(): 
with np.load("mnist.npz") as f:
x_train = f['arr_0'].astype("float32") / 255 # Пример для 'arr_0'
y_train = f['arr_1']
...


3. Правильный reshape изображений:
В коде `utils.py` ошибка в строке:
 x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1])) 
Измените её на преобразование в 784-мерный вектор (28x28=784):
 x_train = x_train.reshape((x_train.shape[0], 28 * 28)) 

4. Скачайте правильный файл mnist.npz:
Если проблема в самом файле, скачайте официальный датасет:
 from tensorflow.keras.datasets import mnist 
(x_train, y_train), _ = mnist.load_data()
np.savez("mnist.npz", x_train=x_train, y_train=y_train)


Исправленный код для utils.py:

 import numpy as np  

def load_dataset():
with np.load("mnist.npz") as f:
# Проверьте, какие ключи на самом деле есть в файле
print("Available keys:", f.files) # Уберите эту строку после проверки
x_train = f['x_train'].astype("float32") / 255 # Используйте правильные ключи
x_train = x_train.reshape((x_train.shape[0], 28 * 28)) # Исправленный reshape
y_train = f['y_train']
y_train = np.eye(10)[y_train]
return x_train, y_train

Примечание: Если вы используете датасет MNIST из Keras/TensorFlow, проще загрузить его напрямую:

 from tensorflow.keras.datasets import mnist 

(x_train, y_train), (x_test, y_test) = mnist.load_data()
# Далее предобработка данных...
Илья КалияУченик (166) 3 недели назад
Большое спасибо!
Анатолий Зяблин Просветленный (37878) Илья Калия, Не за что!
*~ Zerx ~* Гуру (3162) 3 недели назад
 import numpy as np 
from tensorflow.keras.datasets import mnist

def load_dataset():
# Загрузка данных
(x_train, y_train), _ = mnist.load_data()

# Нормализация и преобразование в векторы
x_train = x_train.reshape(-1, 784).astype("float32") / 255.0

# One-hot кодирование меток
y_train = np.eye(10)[y_train]

return x_train, y_train

 import numpy as np 
import matplotlib.pyplot as plt
import utils

# Загрузка данных
images, labels = utils.load_dataset()

# Инициализация параметров сети
weights_input_to_hidden = np.random.uniform(-0.5, 0.5, (20, 784))
weights_hidden_to_output = np.random.uniform(-0.5, 0.5, (10, 20))
bias_input_to_hidden = np.zeros((20, 1))
bias_hidden_to_output = np.zeros((10, 1))
Похожие вопросы