Ошибка возникает из-за того, что в вашем файле `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()
# Далее предобработка данных...
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'