【问题标题】:Save and load keras tensorflow model in Colab OSError message在 Colab OSError 消息中保存和加载 keras tensorflow 模型
【发布时间】:2020-10-28 19:05:46
【问题描述】:

我想运行/拟合一个模型,保存它然后加载它。我想利用SavedModel 格式并保存整个模型并为此提供解决方案。这不是 HDF5 格式,所以不是 .h5 格式,但事实证明即使使用 .h5 它也不起作用(请参阅下面的答案/评论)。我在 Colab 工作。我的代码如下:

import tensorflow as tf

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator

import os
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.python.keras.utils.version_utils import training
from tensorflow.keras.optimizers import RMSprop

_URL = 'https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip'

path_to_zip = tf.keras.utils.get_file('cats_and_dogs.zip', origin=_URL, extract=True, cache_subdir = '/tmp/catsdogs')

PATH = os.path.join(os.path.dirname(path_to_zip), 'cats_and_dogs_filtered')

training_dir = os.path.join(PATH, 'train')
validation_dir = os.path.join(PATH, 'validation')


train_image_generator = ImageDataGenerator(rescale=1./255)
validation_image_generator = ImageDataGenerator(rescale=1./255)

train_datagen = train_image_generator.flow_from_directory(
  directory=training_dir,
  target_size=(300, 300),
  shuffle=True,
  batch_size=128,
  class_mode='binary'
)

val_datagen = validation_image_generator.flow_from_directory(
  directory=validation_dir,
  target_size=(300, 300),
  batch_size=128,
  class_mode='binary'
)

model = Sequential([
    Conv2D(16, 3, padding = 'same', activation='relu', input_shape=(300, 300 ,3)),
    MaxPooling2D(),
    Conv2D(32, 3, padding = 'same', activation='relu'),
    MaxPooling2D(),
    Conv2D(64, 3, padding = 'same', activation='relu'),
    MaxPooling2D(),
    Dropout(0.2),
    Flatten(),
    Dense(512, activation='relu'),
    Dense(1)
])

model.compile(optimizer='Adam', loss=tf.keras.losses.BinaryCrossentropy(from_logits=True), metrics=['acc'])

model.summary()

history = model.fit(train_datagen,validation_data=val_datagen,epochs=1)

现在我想保存这个模型并加载它:

model.save('saved_model')

from keras.models import load_model
modeldownload = load_model('saved_model')

但是,这不起作用(同样的问题,当我将from keras-models import load_model 直接放在其他导入所在的开头时)。我收到以下错误消息:

OSError: Unable to open file

全文:

---------------------------------------------------------------------------

OSError                                   Traceback (most recent call last)

<ipython-input-24-1b29d8169144> in <module>()
      1 model.save('saved_model')
----> 2 modeldownload = load_model('saved_model')

4 frames

/usr/local/lib/python3.6/dist-packages/h5py/_hl/files.py in make_fid(name, mode, userblock_size, fapl, fcpl, swmr)
    171         if swmr and swmr_support:
    172             flags |= h5f.ACC_SWMR_READ
--> 173         fid = h5f.open(name, flags, fapl=fapl)
    174     elif mode == 'r+':
    175         fid = h5f.open(name, h5f.ACC_RDWR, fapl=fapl)

h5py/_objects.pyx in h5py._objects.with_phil.wrapper()

h5py/_objects.pyx in h5py._objects.with_phil.wrapper()

h5py/h5f.pyx in h5py.h5f.open()

OSError: Unable to open file (file read failed: time = Wed Jul  8 11:17:03 2020
, filename = 'saved_model', file descriptor = 62, errno = 21, error message = 'Is a directory', buf = 0x7fff87aca540, total read size = 8, bytes this sub-read = 8, bytes actually read = 18446744073709551615, offset = 0)

我试着和我们一起玩,使用不同的文件夹、子目录等等。但我没有让它工作。如何正确执行?我也试过model.fit(train_datagen,validation_data=val_datagen,epochs=1),所以没有history =,但同样的错误信息。

【问题讨论】:

  • 您正在使用 tf.keras 保存模型,然后使用 keras 加载它,这不是同一个库,所以这不起作用,为此您需要使用 tf.keras.models .load_model

标签: python tensorflow keras google-colaboratory


【解决方案1】:

试试这个

model.save('modelname.h5') 

然后使用加载模型

from keras.models import load_model  

modeldownload = load_model('modelname.h5')

【讨论】:

  • 我收到一个错误“ValueError: Unknown initializer: GlorotUniform”。此外,我想利用 SavedModel 格式而不是 HDF5 格式。
  • model.save('modelname.h5', overwrite=True, include_optimizer=True, save_format=None, signatures=None, options=None) 试试这个
猜你喜欢
  • 2019-04-12
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多