tensorflow版本:t2.13.0-rc1
import os
import cv2
import numpy as np
import pandas as pd
import tensorflow as tf
import pytesseract as pt
import plotly.express as px
import matplotlib.pyplot as plt
import xml.etree.ElementTree as xet
from glob import glob
from skimage import io
from shutil import copy
from tensorflow.keras.models import Model
from tensorflow.keras.preprocessing.image import load_img, img_to_array
from sklearn.model_selection import train_test_split
from tensorflow.keras.applications import InceptionResNetV2
from tensorflow.keras.layers import Dense, Dropout, Flatten, Input
from tensorflow.keras.callbacks import TensorBoard
#Targeting all our values in array selecting all columns
labels = df.iloc[:,1:].values
data = []
output = []
for ind in range(len(image_path)):
image = image_path[ind]
img_arr = cv2.imread(image)
h,w,d = img_arr.shape
# Prepprocesing
load_image = load_img(image,target_size=(224,224))
load_image_arr = img_to_array(load_image)
norm_load_image_arr = load_image_arr/255.0 # Normalization
# Normalization to labels
xmin,xmax,ymin,ymax = labels[ind]
nxmin,nxmax = xmin/w,xmax/w
nymin,nymax = ymin/h,ymax/h
label_norm = (nxmin,nxmax,nymin,nymax) # Normalized output
# Append
data.append(norm_load_image_arr)
output.append(label_norm)
# Convert data to array
X = np.array(data,dtype=np.float32)
y = np.array(output,dtype=np.float32)
# Split the data into training and testing set using sklearn.
x_train, x_test, y_train, y_test = train_test_split(X, y, train_size=0.8, random_state=0)
x_train.shape,x_test.shape,y_train.shape,y_test.shape
# My Model
inception_resnet = InceptionResNetV2(weights="imagenet",include_top=False, input_tensor=Input(shape=(224,224,3)))
# ---------------------
headmodel = inception_resnet.output
headmodel = Flatten()(headmodel)
headmodel = Dense(500,activation="relu")(headmodel)
headmodel = Dense(250,activation="relu")(headmodel)
headmodel = Dense(4,activation='sigmoid')(headmodel)
# ---------- model
model = Model(inputs=inception_resnet.input,outputs=headmodel)
model.compile(loss='mse', optimizer=tf.keras.optimizers.legacy.Adam(learning_rate=1e-4))
model.summary()`
# model.summary short output :(**I have shown you last few rows of model summary**)**
conv2d_605 (Conv2D) (None, 5, 5, 192) 399360 ['block8_9_ac[0][0]']
conv2d_608 (Conv2D) (None, 5, 5, 256) 172032 ['activation_607[0][0]']
batch_normalization_605 (B (None, 5, 5, 192) 576 ['conv2d_605[0][0]']
atchNormalization)
batch_normalization_608 (B (None, 5, 5, 256) 768 ['conv2d_608[0][0]']
atchNormalization)
activation_605 (Activation (None, 5, 5, 192) 0 ['batch_normalization_605[0][0
) ]']
activation_608 (Activation (None, 5, 5, 256) 0 ['batch_normalization_608[0][0
) ]']
block8_10_mixed (Concatena (None, 5, 5, 448) 0 ['activation_605[0][0]',
te) 'activation_608[0][0]']
block8_10_conv (Conv2D) (None, 5, 5, 2080) 933920 ['block8_10_mixed[0][0]']
custom_scale_layer_119 (Cu (None, 5, 5, 2080) 0 ['block8_9_ac[0][0]',
stomScaleLayer) 'block8_10_conv[0][0]']
conv_7b (Conv2D) (None, 5, 5, 1536) 3194880 ['custom_scale_layer_119[0][0]
']
conv_7b_bn (BatchNormaliza (None, 5, 5, 1536) 4608 ['conv_7b[0][0]']
tion)
conv_7b_ac (Activation) (None, 5, 5, 1536) 0 ['conv_7b_bn[0][0]']
flatten_2 (Flatten) (None, 38400) 0 ['conv_7b_ac[0][0]']
dense_6 (Dense) (None, 500) 1920050 ['flatten_2[0][0]']
0
dense_7 (Dense) (None, 250) 125250 ['dense_6[0][0]']
dense_8 (Dense) (None, 4) 1004 ['dense_7[0][0]']
==================================================================================================
Total params: 73663490 (281.00 MB)
Trainable params: 73602946 (280.77 MB)
Non-trainable params: 60544 (236.50 KB)
tfb = TensorBoard('object_detection2')
history = model.fit(x=x_train,y=y_train,batch_size=10,epochs=180,
validation_data=(x_test,y_test),callbacks=[tfb])
model.save('./object_detection.h5')
模型训练后,加载模型
model = tf.keras.models.load_model('./object_detection.h5')
print('Model loaded Sucessfully')
我会得到这个错误
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[30], line 2
1 # Load model
----> 2 model = tf.keras.models.load_model('./object_detection.h5')
3 print('Model loaded Sucessfully')
File ~/anaconda3/lib/python3.10/site-packages/keras/src/saving/saving_api.py:238, in load_model(filepath, custom_objects, compile, safe_mode, **kwargs)
230 return saving_lib.load_model(
231 filepath,
232 custom_objects=custom_objects,
233 compile=compile,
234 safe_mode=safe_mode,
235 )
237 # Legacy case.
--> 238 return legacy_sm_saving_lib.load_model(
239 filepath, custom_objects=custom_objects, compile=compile, **kwargs
240 )
File ~/anaconda3/lib/python3.10/site-packages/keras/src/utils/traceback_utils.py:70, in filter_traceback.<locals>.error_handler(*args, **kwargs)
67 filtered_tb = _process_traceback_frames(e.__traceback__)
68 # To get the full stack trace, call:
69 # `tf.debugging.disable_traceback_filtering()`
---> 70 raise e.with_traceback(filtered_tb) from None
71 finally:
72 del filtered_tb
File ~/anaconda3/lib/python3.10/site-packages/keras/src/saving/legacy/serialization.py:365, in class_and_config_for_serialized_keras_object(config, module_objects, custom_objects, printable_module_name)
361 cls = object_registration.get_registered_object(
362 class_name, custom_objects, module_objects
363 )
364 if cls is None:
--> 365 raise ValueError(
366 f"Unknown {printable_module_name}: '{class_name}'. "
367 "Please ensure you are using a `keras.utils.custom_object_scope` "
368 "and that this object is included in the scope. See "
369 "https://www.tensorflow.org/guide/keras/save_and_serialize"
370 "#registering_the_custom_object for details."
371 )
373 cls_config = config["config"]
374 # Check if `cls_config` is a list. If it is a list, return the class and the
375 # associated class configs for recursively deserialization. This case will
376 # happen on the old version of sequential model (e.g. `keras_version` ==
377 # "2.0.6"), which is serialized in a different structure, for example
378 # "{'class_name': 'Sequential',
379 # 'config': [{'class_name': 'Embedding', 'config': ...}, {}, ...]}".
ValueError: Unknown layer: 'CustomScaleLayer'. Please ensure you are using a `keras.utils.custom_object_scope` and that this object is included in the scope. See https://www.tensorflow.org/guide/keras/save_and_serialize#registering_the_custom_object for details.
1条答案
按热度按时间6ojccjat1#
我也有同样的问题。错误的原因是开发环境(我使用Kaggle)和本地机器上的tensforflow版本之间的差异。如果这不起作用,您可以在这里寻找解决方案: