保存.npy文件遇TypeError及UnicodeDecodeError的解决求助
解决Numpy读写.npy文件的字节编码与类型错误
问题根源
你遇到的两个错误本质上都是文件打开模式不匹配导致的:numpy的.npy格式是二进制文件,读写时必须用二进制模式,而你要么用了文本写入模式,要么用了文本读取模式,才触发了报错。
第一个错误:写入时的TypeError: write() argument must be str, not bytes
你最初的写入代码用了'w'(文本写入模式),但np.save()需要写入二进制数据,文本模式只能处理字符串,所以会抛出类型错误。
你改成'wb'(二进制写入模式)是正确的,但读取时没同步调整模式,才引发了第二个错误。
第二个错误:读取时的UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93...
读取时你用了默认的文本读取模式(open()默认是'r'),但.npy是二进制文件,文本模式会尝试用UTF-8解码二进制内容,自然会触发编码错误。
最终正确的代码实现
写入.npy文件
bottleneck_features_train = model.predict_generator(generator, nb_train_samples // batch_size) np.save(open('bottleneck_features_train.npy', 'wb'), bottleneck_features_train)
读取.npy文件
def train_top_model(): train_data = np.load(open('bottleneck_features_train.npy', 'rb'))
更简洁的写法(推荐)
其实np.save和np.load可以直接接收文件名作为参数,它们会自动处理二进制模式,不用手动调用open(),这样更不容易出错:
# 写入 np.save('bottleneck_features_train.npy', bottleneck_features_train) # 读取 def train_top_model(): train_data = np.load('bottleneck_features_train.npy')
内容的提问来源于stack exchange,提问作者Atul Balaji
相关产品推荐
相关产品推荐

