Python 在Colab OSError消息中保存并加载keras tensorflow模型
我想运行/拟合模型,保存该模型,然后加载它。我想利用这个格式,保存整个模型,并有一个解决方案。这不是HDF5格式,也不是.h5格式,但事实证明,即使使用.h5,它也不起作用(请参阅下面的回答/评论)。我在Colab工作。我的代码如下:Python 在Colab OSError消息中保存并加载keras tensorflow模型,python,tensorflow,keras,google-colaboratory,Python,Tensorflow,Keras,Google Colaboratory,我想运行/拟合模型,保存该模型,然后加载它。我想利用这个格式,保存整个模型,并有一个解决方案。这不是HDF5格式,也不是.h5格式,但事实证明,即使使用.h5,它也不起作用(请参阅下面的回答/评论)。我在Colab工作。我的代码如下: import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Conv2D, Flatten,
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')
但是,这不起作用(同样的问题,当我将来自keras models import load\u 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)
---------------------------------------------------------------------------
OSError回溯(最近一次调用上次)
在()
1 model.save('saved_model')
---->2模型下载=加载模型(“保存的模型”)
4帧
/make\u fid中的usr/local/lib/python3.6/dist-packages/h5py//u hl/files.py(名称、模式、用户块大小、fapl、fcpl、swmr)
171如果swmr和swmr_支持:
172个标志|=h5f.ACC_SWMR_读取
-->173 fid=h5f.打开(名称、标志、fapl=fapl)
174 elif模式=='r+':
175 fid=h5f.开启(名称,h5f.ACC_RDWR,fapl=fapl)
h5py.\u objects.with\u phil.wrapper()中的h5py/\u objects.pyx
h5py.\u objects.with\u phil.wrapper()中的h5py/\u objects.pyx
h5py.h5f.open()中的h5py/h5f.pyx
OSError:无法打开文件(文件读取失败:时间=Wed Jul 8 11:17:03 2020
,filename='saved_model',file descriptor=62,errno=21,错误消息='Is a directory',buf=0x7fff87aca540,总读取大小=8,此子读取的字节数=8,实际读取的字节数=18446744073709551615,偏移量=0)
我试着和我们一起玩,使用不同的文件夹、子目录等等。但我没有让它工作。如何正确地做?我还尝试了model.fit(train\u datagen,validation\u data=val\u datagen,epochs=1)
,因此没有history=
,但有相同的错误消息。试试这个
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\u optimizer=True,save\u format=None,signatures=None,options=None)试试这个你正在使用tf.keras保存模型,然后使用keras加载它,它不是同一个库,所以这不起作用,为此,您需要使用tf.keras.models.load\u model