Ошибка load_model: ValueError: неправильно отформатированный конфиг модели, когда tennerflow.keras - PullRequest
0 голосов
/ 30 мая 2019

Я могу загрузить модель с помощью load_model ("model.h5") в colab и создать модель model.predict, которая работает. Но когда я загружаю файл h5 и запускаю load_model локально, вызов load_model выдает ошибку «ValueError: Неправильно отформатированная конфигурация модели.»

Это модель:

base_model=MobileNet(weights='imagenet',include_top=False) #imports the mobilenet model and discards the last 1000 neuron layer.

x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(1024,activation='relu')(x) #we add dense layers so that the model can learn more complex functions and classify for better results.
x=Dense(1024,activation='relu')(x) #dense layer 2
x=Dense(512,activation='relu')(x) #dense layer 3
preds=Dense(2,activation='softmax')(x) #final layer with softmax activation

с использованием заочного обучения

model=Model(inputs=base_model.input,outputs=preds)

for layer in model.layers[:20]:
    layer.trainable=False
for layer in model.layers[20:]:
    layer.trainable=True

затем обучается


train_generator=train_datagen.flow_from_directory('/content/chest_xray/train/',
                                                  target_size=(224,224),
                                                  color_mode='rgb',
                                                  batch_size=32,
                                                  class_mode='categorical', shuffle=True)


model.compile(optimizer='Adam',loss='categorical_crossentropy',metrics=['accuracy'])
# Adam optimizer
# loss function will be categorical cross entropy
# evaluation metric will be accuracy

step_size_train=train_generator.n//train_generator.batch_size
model.fit_generator(generator=train_generator,
                   steps_per_epoch=step_size_train,
                   epochs=5)

модель сохранена

model.save('chest-xray-pneumonia.h5') 

прогнозные работы

ill_path = "/content/chest_xray/train/PNEUMONIA/" 
good_path = "/content/chest_xray/train/NORMAL/" 

ill_pic = ill_path + os.listdir(ill_path)[1]
good_pic = good_path + os.listdir(good_path)[1]

print(get_rez(ill_pic))
print(get_rez(good_pic))

Но локально запущенный в Python-скрипте приложения Flask main.py, он не

from flask import render_template, jsonify, Flask, redirect, url_for, request
from app import app
import random
import os
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing import image
from tensorflow.keras.applications.mobilenet import preprocess_input, decode_predictions
import numpy as np
import ipdb

weightsPath = app.config['UPLOAD_FOLDER']

получить ошибку в следующей строке: ValueError: неправильно отформатированный конфиг модели.

 new_model = load_model(os.path.join(app.config['UPLOAD_FOLDER'],"chest-xray-pneumonia.h5"))

def upload_file():
   if request.method == 'POST':
      f = request.files['file']
      path = os.path.join(app.config['UPLOAD_FOLDER'], f.filename)
      #f.save(os.path.join(app.config['UPLOAD_FOLDER'], f.filename))
      ill_pic = os.path.join(app.config['UPLOAD_FOLDER'], 
      f.filename)

print(get_rez(ill_pic))

...