如何把后缀为h5类型的文件储存到redis(python实现)

如何把后缀为h5类型的文件储存到redis(python实现)

  1. 这几天在做项目时,需要把tensflow中生成的模型文件(后缀为h5)储存到redis中,查了两天的资料,没在网上找到通过python实现将文件储存到redis的有效办法。在不断摸索过程中找到一个能够将.h5导入redis的方法。

  2. 思考一(通过将h5文件内容读取出来,存储到redis):h5类型文件的读取方法目前知道两种方式; 一种是通过h5py库的h5py.File()函数读取,另一种是通过deepdish库的deepdish.io.load()函数读取,这两种读取方法都会返回一个dict类型数据,但是redis没有直接储存dict的方法。本来希望通过类型转换将dict转化为string类型直接存到redis中,但是读取出来虽然跟原来内容一样,但是变成了string类型,不能直接使用,试图通过 eval()方法转化为dict类型却发现内容直接变成空内容,原本数据都已丢失。
    结果:能够成功将数据存进去,但是读出来类型转化解决不了,无法把读取的内容再次存到本地h5文件中

  3. 思考二(将所有h5文件内容编码,然后存到redis中,读取出来解码后写入本地h5文件) h5的编码格式比较特殊(通过TXT打开另存显示为ANSI,通过调用cchardet库detect()函数结果为‘encoding = None’),直接通过二进制打开文件。

连接到redis
s = redis.Redis(host='127.0.0.1', port=6379,decode_responses=True)
二进制打开文件

with open('filename.h5', "rb") as f:
	msg = f.read()

如果直接将二进制信息msg存到redis中,则读取时获取的string会因解码问题报错。
在这里插入图片描述
调用base64库对其进行编码可解决这个问题

import base64

编码后加载到redis中

msg = base64.b64encode(msg)
s.set('key',msg)

取出后,解码,存到本地的h5文件中

i = base64.b64decode(s.get('key'))
with open(r"yours_model.h5", "wb") as f:
    f.write(i)

加载模型(h5文件)验证:

model = tf.keras.models.load_model('model_path')
model.summary()

在这里插入图片描述
能够加载出模型
训练:

(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()

train_labels = train_labels[:1000]
test_labels = test_labels[:1000]

train_images = train_images[:1000].reshape(-1, 28 * 28) / 255.0
test_images = test_images[:1000].reshape(-1, 28 * 28) / 255.0
loss, acc = model.evaluate(test_images,  test_labels, verbose=2)

在这里插入图片描述
4.理论上应该有更容易的方法实现redis对文件的储存在保存到本地文件中(本人能力较差,不知道有啥其他的方法)。
以此类推,这种方法可以实现对各种文件redis储存,再通过解码的方式获取,前提是需要知道文件的类型,即后缀(如txt …);实际上也可以将文件类型存储到redis,现通过对应的key值得知文件类型,再对文件进行读取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值