千家信息网

keras和tensorflow模型同时读取报错如何解决

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"keras和tensorflow模型同时读取报错如何解决"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"keras和tensorflow模型同
千家信息网最后更新 2026年11月03日keras和tensorflow模型同时读取报错如何解决

这篇文章主要介绍"keras和tensorflow模型同时读取报错如何解决"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"keras和tensorflow模型同时读取报错如何解决"文章能帮助大家解决问题。

在使用tensorflow与keras混用是model.save 是正常的但是在load_model的时候报错了在这里mark 一下

其中错误为:TypeError: tuple indices must be integers, not list

再一一番百度后无结果,上谷歌后找到了类似的问题。但是是一对鸟文不知道什么东西(翻译后发现是俄文)。后来谷歌翻译了一下找到了解决方法。故将原始问题文章贴上来警示一下

原训练代码

from tensorflow.python.keras.preprocessing.image import ImageDataGeneratorfrom tensorflow.python.keras.models import Sequentialfrom tensorflow.python.keras.layers import Conv2D, MaxPooling2D, BatchNormalizationfrom tensorflow.python.keras.layers import Activation, Dropout, Flatten, Dense #Каталог с данными для обученияtrain_dir = 'train'# Каталог с данными для проверкиval_dir = 'val'# Каталог с данными для тестированияtest_dir = 'val' # Размеры изображенияimg_width, img_height = 800, 800# Размерность тензора на основе изображения для входных данных в нейронную сеть# backend Tensorflow, channels_lastinput_shape = (img_width, img_height, 3)# Количество эпохepochs = 1# Размер мини-выборкиbatch_size = 4# Количество изображений для обученияnb_train_samples = 300# Количество изображений для проверкиnb_validation_samples = 25# Количество изображений для тестированияnb_test_samples = 25 model = Sequential() model.add(Conv2D(32, (7, 7), padding="same", input_shape=input_shape))model.add(BatchNormalization())model.add(Activation('tanh'))model.add(MaxPooling2D(pool_size=(10, 10))) model.add(Conv2D(64, (5, 5), padding="same"))model.add(BatchNormalization())model.add(Activation('tanh'))model.add(MaxPooling2D(pool_size=(10, 10))) model.add(Flatten())model.add(Dense(512))model.add(Activation('relu'))model.add(Dropout(0.5))model.add(Dense(10, activation='softmax')) model.compile(loss='categorical_crossentropy',              optimizer="Nadam",              metrics=['accuracy'])print(model.summary())datagen = ImageDataGenerator(rescale=1. / 255) train_generator = datagen.flow_from_directory(    train_dir,    target_size=(img_width, img_height),    batch_size=batch_size,    class_mode='categorical') val_generator = datagen.flow_from_directory(    val_dir,    target_size=(img_width, img_height),    batch_size=batch_size,    class_mode='categorical') test_generator = datagen.flow_from_directory(    test_dir,    target_size=(img_width, img_height),    batch_size=batch_size,    class_mode='categorical') model.fit_generator(    train_generator,    steps_per_epoch=nb_train_samples // batch_size,    epochs=epochs,    validation_data=val_generator,    validation_steps=nb_validation_samples // batch_size) print('Сохраняем сеть') model.save("grib.h6")print("Сохранение завершено!")

模型载入

from tensorflow.python.keras.preprocessing.image import ImageDataGeneratorfrom tensorflow.python.keras.models import Sequentialfrom tensorflow.python.keras.layers import Conv2D, MaxPooling2D, BatchNormalizationfrom tensorflow.python.keras.layers import Activation, Dropout, Flatten, Densefrom keras.models import load_model print("Загрузка сети")model = load_model("grib.h6")print("Загрузка завершена!")

报错

/usr/bin/python3.5 /home/disk2/py/neroset/do.py
/home/mama/.local/lib/python3.5/site-packages/h6py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
Using TensorFlow backend.
Загрузка сети
Traceback (most recent call last):
File "/home/disk2/py/neroset/do.py", line 13, in
model = load_model("grib.h6")
File "/usr/local/lib/python3.5/dist-packages/keras/models.py", line 243, in load_model
model = model_from_config(model_config, custom_objects=custom_objects)
File "/usr/local/lib/python3.5/dist-packages/keras/models.py", line 317, in model_from_config
return layer_module.deserialize(config, custom_objects=custom_objects)
File "/usr/local/lib/python3.5/dist-packages/keras/layers/__init__.py", line 55, in deserialize
printable_module_name='layer')
File "/usr/local/lib/python3.5/dist-packages/keras/utils/generic_utils.py", line 144, in deserialize_keras_object
list(custom_objects.items())))
File "/usr/local/lib/python3.5/dist-packages/keras/models.py", line 1350, in from_config
model.add(layer)
File "/usr/local/lib/python3.5/dist-packages/keras/models.py", line 492, in add
output_tensor = layer(self.outputs[0])
File "/usr/local/lib/python3.5/dist-packages/keras/engine/topology.py", line 590, in __call__
self.build(input_shapes[0])
File "/usr/local/lib/python3.5/dist-packages/keras/layers/normalization.py", line 92, in build
dim = input_shape[self.axis]
TypeError: tuple indices must be integers or slices, not list

Process finished with exit code 1

战斗种族解释

убераю BatchNormalization всё работает хорошо. Не подскажите в чём ошибка?Выяснил что сохранение keras и нормализация tensorflow не работают вместе нужно просто изменить строку импорта.(译文:整理BatchNormalization一切正常。 不要告诉我错误是什么?我发现保存keras和规范化tensorflow不能一起工作;只需更改导入字符串即可。)

强调文本 强调文本

keras.preprocessing.image import ImageDataGeneratorkeras.models import Sequentialkeras.layers import Conv2D, MaxPooling2D, BatchNormalizationkeras.layers import Activation, Dropout, Flatten, Dense

##完美解决

补充:keras和tensorflow模型同时读取要慎重

项目中,先读取了一个keras模型获取模型输入size,再加载keras转tensorflow后的pb模型进行预测。

报错:

Attempting to use uninitialized value batch_normalization_14/moving_mean

逛论坛,有建议加上初始化:

sess.run(tf.global_variables_initializer())

但是这样的话,会导致模型参数全部变成初始化数据。无法使用预测模型参数。

最后发现,将keras模型的加载去掉即可。

猜测原因:keras模型和tensorflow模型同时读取有坑

import cv2import numpy as npfrom keras.models import load_modelfrom utils.datasets import get_labelsfrom utils.preprocessor import preprocess_inputimport timeimport osimport tensorflow as tffrom tensorflow.python.platform import gfile os.environ["CUDA_VISIBLE_DEVICES"] = "-1" emotion_labels = get_labels('fer2013')emotion_target_size = (64,64)#emotion_model_path = './models/emotion_model.hdf5'#emotion_classifier = load_model(emotion_model_path)#emotion_target_size = emotion_classifier.input_shape[1:3] path = '/mnt/nas/cv_data/emotion/test'filelist = os.listdir(path)total_num = len(filelist)timeall = 0n = 0 sess = tf.Session()#sess.run(tf.global_variables_initializer())with gfile.FastGFile("./trans_model/emotion_mode.pb", 'rb') as f:    graph_def = tf.GraphDef()    graph_def.ParseFromString(f.read())    sess.graph.as_default()    tf.import_graph_def(graph_def, name='')     pred = sess.graph.get_tensor_by_name("predictions/Softmax:0")     ######################img##########################    for item in filelist:        if (item == '.DS_Store') | (item == 'Thumbs.db'):            continue        src = os.path.join(os.path.abspath(path), item)        bgr_image = cv2.imread(src)        gray_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2GRAY)        gray_face = gray_image        try:            gray_face = cv2.resize(gray_face, (emotion_target_size))        except:            continue         gray_face = preprocess_input(gray_face, True)        gray_face = np.expand_dims(gray_face, 0)        gray_face = np.expand_dims(gray_face, -1)         input = sess.graph.get_tensor_by_name('input_1:0')        res = sess.run(pred, {input: gray_face})        print("src:", src)         emotion_probability = np.max(res[0])        emotion_label_arg = np.argmax(res[0])        emotion_text = emotion_labels[emotion_label_arg]        print("predict:", res[0], ",prob:", emotion_probability, ",label:", emotion_label_arg, ",text:",emotion_text)

关于"keras和tensorflow模型同时读取报错如何解决"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

模型 同时 知识 问题 参数 文本 文章 方法 行业 错误 不同 原始 实用 这样的话 东西 代码 内容 原因 只需 字符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 耶加雪菲 互联网科技公司简介 互联网是不是新科技 腾讯科技 互联网女皇 亿账通互联网科技 郑州华宇互联网科技 互联网科技咨询 重庆科技学院互联网 美国互联网前沿科技 移动互联网科技公司 互联网数据科技专业 世界互联网领先科技成果获奖 合肥互联网科技公司公章图片 科技互联网的核心竞争力 九思连强互联网电子科技有限公司 广东鹅鹅鹅互联网科技有限公司 萌小萌互联网科技河南有限公司 江苏互联网智能科技产品出厂价 互联网领先科技成果宣传视频 如何强化互联网金融科技 科技类互联网 深圳齐家互联网科技 苏州互联网科技贷款公司 互联网媒体平台算高科技产业 亳州好赞互联网科技有限公司 黑云互联网科技有限公司 互联网科技新闻 兰石爱特工业互联网科技分公司 互联网科技创业计划的风险分析 瑞安市蟠桃会互联网科技有限公司
0