Как развернуть файл cnn - PullRequest
7 голосов
/ 14 мая 2019

Я обучил модель с использованием этого кода ...

https://github.com/shantanuo/pandas_examples/blob/master/tensorflow/simages_train_waiting.ipynb

Мой файл готов, но как его развернуть?

https://s3.ap -south-1.amazonaws.com / studentimages162a / cnn.h5

Я пытался использовать размещенное решение panini.ai, но оно не принимает файлы h5.Я пытался преобразовать его в CSV, но это не сработало.Я также пытался использовать колбу

https://github.com/mtobeiyf/keras-flask-deploy-webapp

Я получил эту ошибку при попытке запустить контейнер Docker ...

# docker run -v /tmp/:/tmp/ -p 5000:5000 keras_flask_app
Using TensorFlow backend.
Traceback (most recent call last):
  File "app.py", line 26, in <module>
    model = load_model(MODEL_PATH)
  File "/usr/local/lib/python2.7/site-packages/keras/engine/saving.py", line 419, in load_model
    model = _deserialize_model(f, custom_objects, compile)
  File "/usr/local/lib/python2.7/site-packages/keras/engine/saving.py", line 221, in _deserialize_model
    model_config = f['model_config']
  File "/usr/local/lib/python2.7/site-packages/keras/utils/io_utils.py", line 302, in __getitem__
    raise ValueError('Cannot create group in read only mode.')
ValueError: Cannot create group in read only mode.

Другими словами, как использоватьФайл cnn.h5?


Я пытаюсь использовать этот код ...

from keras.models import Sequential
from keras.layers import Dense, Activation

def build_model():
    model = Sequential()

    model.add(Dense(output_dim=64, input_dim=100))
    model.add(Activation("relu"))
    model.add(Dense(output_dim=10))
    model.add(Activation("softmax"))
    model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
    return model

model2 = build_model()
model2.load_weights('cnn.h5')

И получил ошибку:

ValueError: You are trying to load a weight file containing 4 layers into a model with 2 layers.

Ответы [ 3 ]

6 голосов
/ 16 мая 2019

Что касается первой ошибки, проблема заключается в том, что приложение фляги пытается загрузить полную модель (т.е. с конфигурацией):

 model = load_model(MODEL_PATH)

, тогда как после тренировки вы сохраняете только веса:

cnn.save_weights('cnn.h5')

Попробуйте вместо этого использовать cnn.save('cnn.h5').

Во втором случае определение вашей модели не соответствует обученной модели.Действительно, это совершенно другая модель, в которой вообще нет слоев свертки.Соответствующее определение модели будет:

def build_model():
    model = Sequential()

    model.add(Conv2D(filters=32, 
           kernel_size=(2,2), 
           strides=(1,1),
           padding='same',
           input_shape=(IMG_SIZE,IMG_SIZE,NB_CHANNELS),
           data_format='channels_last'))


    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2,2),
                           strides=2))

    model.add(Dropout(0.4))

    model.add(Conv2D(filters=64,
                     kernel_size=(2,2),
                     strides=(1,1),
                     padding='valid'))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2,2),
                           strides=2))

    model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
    return model
3 голосов
/ 17 мая 2019

Вы можете загрузить модель следующим образом:

from tensorflow.keras.models import load_model
model = load_model('cnn.h5')

Данные тренировки / теста могут быть загружены с помощью следующего кода:

import h5py
import numpy as np
hf = h5py.File('cnn.h5', 'r')
0 голосов
/ 23 мая 2019

Ваша обученная модель и модель, которую вы пытаетесь загрузить, различаются. Заменить

cnn = Sequential ()

с

cnn = build_model ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...