MNIST如何读取本地数据
时间: 2023-09-02 20:08:40 浏览: 39
?MNIST数据集是一个常用的手写数字识别数据集,可以通过以下代码读取本地数据:
```
import numpy as np
import struct
def read_mnist_data(filename):
with open(filename, 'rb') as f:
binary_data = f.read()
magic_number, num_images, num_rows, num_cols = struct.unpack('>IIII', binary_data[:16])
pixel_num = num_rows * num_cols
offset = struct.calcsize('>IIII')
images = np.empty((num_images, pixel_num))
for i in range(num_images):
images[i] = struct.unpack_from('>{}B'.format(pixel_num), binary_data, offset)
offset += struct.calcsize('>{}B'.format(pixel_num))
return images.reshape(-1, num_rows, num_cols)
def read_mnist_label(filename):
with open(filename, 'rb') as f:
binary_data = f.read()
magic_number, num_images = struct.unpack('>II', binary_data[:8])
offset = struct.calcsize('>II')
labels = np.empty(num_images, dtype=int)
for i in range(num_images):
labels[i] = struct.unpack_from('>B', binary_data, offset)[0]
offset += struct.calcsize('>B')
return labels
X_train = read_mnist_data('train-images-idx3-ubyte')
y_train = read_mnist_label('train-labels-idx1-ubyte')
X_test = read_mnist_data('t10k-images-idx3-ubyte')
y_test = read_mnist_label('t10k-labels-idx1-ubyte')
```
其中,MNIST数据集包含四个文件:
- train-images-idx3-ubyte:训练数据集
- train-labels-idx1-ubyte:训练数据标签
- t10k-images-idx3-ubyte:测试数据集
- t10k-labels-idx1-ubyte:测试数据标签
为了方便读取数据,我们可以自己编写一个函数来读取这些文件。具体实现可以参考上面的代码。