报错could not convert string to float: "\x00\x00\x08\x01\x00\x00'\x10\x07\x02\x01\x00\x04\x01\x04"
时间: 2023-07-05 11:31:30 浏览: 157
这个错误是因为尝试使用 np.loadtxt 函数读取 MNIST 数据集中的 t10k-labels-idx1-ubyte 文件时出现了问题。这个文件是一个二进制文件,不能直接使用 np.loadtxt 函数读取。可以使用类似于读取 t10k-images-idx3-ubyte 文件的方式来读取该文件。修改完整代码如下:
```python
import os
import struct
import numpy as np
import matplotlib.pyplot as plt
def read_idx(filename):
with open(filename, 'rb') as f:
zero, data_type, dims = struct.unpack('>HBB', f.read(4))
shape = tuple(struct.unpack('>I', f.read(4))[0] for d in range(dims))
return np.frombuffer(f.read(), dtype=np.uint8).reshape(shape)
data = read_idx('t10k-images-idx3-ubyte')
labels = read_idx('t10k-labels-idx1-ubyte')
for i in range(len(data)):
label = labels[i]
folder = f'label_{label}'
if not os.path.exists(folder):
os.makedirs(folder)
plt.imshow(data[i], cmap='gray')
plt.savefig(os.path.join(folder, f'image_{i}.png'))
```
这里新增了一个 read_idx 函数来读取二进制文件,并将其转换为 numpy 数组。使用这个函数可以读取 MNIST 数据集中的 t10k-labels-idx1-ubyte 文件。
阅读全文