Я разработал DNN для идентификации 5 классов изображений с помощью серверной части Tensorflow.Я хочу преобразовать эту модель Tensorflow в Tendorflow Lite.Когда я попытался преобразовать это, произошла следующая ошибка.
тип повышения (e) (node_def, op, message)
DataLossError : невозможно открыть таблицуfile D: \ My Projects \ FinalProject_Vr_02 \ snakes-0.001-2conv-basic.model.meta: потеря данных: не sstable (неверное магическое число): возможно, ваш файл находится в другом формате, и вам нужно использовать другое восстановлениеоператор?[[node save_1 / RestoreV2 (определено в C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ tflearn \ helpers \ trainer.py: 147) = RestoreV2 [dtypes = [DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT,..., DT_FLOAT, DT_FLOAT, DT_BOOL, DT_FLOAT, DT_FLOAT], _device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0"] (_ arg_save_1 / Const_0_0, save_1 / RestoreV2 / KZTor_names, save_1/ RestoreV2 / shape_and_slices)]]
Вызывается операцией 'save_1 / RestoreV2', определенной в: файле "C: \ Users \ Asus \ Anaconda3 \ lib \ runpy.py", строка 193, в _run_module_as_main " main", mod_spec) Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ runpy.py ", строка 85, в файле _run_code exec (code, run_globals)" "C: \ Users \ Asus \ Anaconda3 \"lib \ site-packages \ spyder_kernels \ console__main __. py ", строка 11, в start.main () Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ console \ start.py ", строка 310, в основном файле kernel.start () "C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ ipykernel \ kernelapp.py", строка 505, в стартовом файле self.io_loop.start () "C: \ Users"\ Asus \ Anaconda3 \ lib \ site-packages \ tornado \ platform \ asyncio.py ", строка 132, в начале файла self.asyncio_loop.run_forever () Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ asyncio \ base_events.py ", строка427, в файле run_forever self._run_once () «C: \ Users \ Asus \ Anaconda3 \ lib \ asyncio \ base_events.py», строка 1440, в файле _run_once handle._run () «C: \ Users \ Asus \ Anaconda3 \»lib \ asyncio \ events.py ", строка 145, в _run self._callback (* self._args) Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ tornado \ ioloop.py ", строка 758,в _run_callback ret = callback () Файл "C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ tornado \ stack_context.py", строка 300, в null_wrapper возвращает fn (* args, ** kwargs) Файл "C:\ Users \ Asus \ Anaconda3 \ lib \ site-packages \ tornado \ gen.py ", строка 1233, во внутреннем файле self.run () Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ tornado \ gen ".py ", строка 1147, в прогоне yielded = self.gen.send (значение) Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ ipykernel \ kernelbase.py ", строка 357, в process_one, приводит к генерации.maybe_future (dispatch (* args)) Файл "C: \Пользователи \ Asus \ Anaconda3 \ lib \ site-packages \ tornado \ gen.py ", строка 326, в обертке, дали = следующий (результат) Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ ipykernel \ kernelbase ".py ", строка 267, в dispatch_shell выдает gen.maybe_future (обработчик (поток, idents, msg)) файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ tornado \ gen.py ", строка 326,в оболочке yielded = next (результат) Файл "C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ ipykernel \ kernelbase.py", строка 534, в execute_request user_expressions, allow_stdin, файл "C: \ Users \ Asus \"Anaconda3 \ lib \ site-packages \ tornado \ gen.py ", строка 326, в оболочке уступил = следующий (результат) Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ ipykernel \ ipkernel.py ",строка 294, в do_execute res = shell.run_cell (код, store_history = store_history, silent = silent) Файл "C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ ipykernel \ zmqshell.py", строка 536, в run_cellвернуть супер (ZMQInteractiveShell, self) .run_cell (* args, ** kwargs) Файл "C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ IPython \ core \ interactiveshell.py ", строка 2819, в run_cell raw_cell, store_history, silent, shell_futures) Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ IPython \ core \ interactiveshell.py ",строка 2845, в _run_cell, возврат бегуна (coro) Файл "C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ IPython \ core \ async_helpers.py", строка 67, в файле _pseudo_sync_runner coro.send (нет) Файл "C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ IPython \ core \ interactiveshell.py ", строка 3020, в run_cell_async интерактивность = интерактивность, компилятор = компилятор, результат = результат) Файл" C: \ Users \ Asus \ Anaconda3\ lib \ site-packages \ IPython \ core \ interactiveshell.py ", строка 3191, в run_ast_nodes if (получено из self.run_code (code, result)): файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ IPython \ core \ interactiveshell.py ", строка 3267, в файле run_code exec (code_obj, self.user_global_ns, self.user_ns)" ", строка 1, в файле запуска ('D: / Мои проекты / FinalProject_Vr_02 / cnn.py', wdir =' D: / Мои проекты / FinalProject_Vr_02 ') Файл "C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py", строка 704, в исполняемом файле исполняемого файла (имя файла, пространство имен) Файл "C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py ", строка 108, в execfile exec (compile (f.read (), filename, 'exec'), пространство имен) Файл" D: / My Projects / FinalProject_Vr_02 / cnn.py ", строка 99, в модели =tflearn.DNN (convnet, tenorboard_dir = 'log') Файл "C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ tflearn \ models \ dnn.py", строка 65, в init best_val_accuracy= best_val_accuracy) Файл "C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ tflearn \ helpers \ trainer.py", строка 147, в init allow_empty = True) Файл "C: \ Users\ Asus \ Anaconda3 \ lib \ site-packages \ tenorflow \ python \ training \ saver.py ", строка 1102, в файле init self.build ()" C: \ Users \ Asus \ Anaconda3 \ lib\ site-packages \ tenorflow \ python \ training \ saver.py ", строка 1114, в сборке self._build (self._filename, build_save = True, build_restore = True) Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ "site-packages \ensorflow \ python \ training \ saver.py ", строка 1151, в _build build_save = build_save, build_restore = build_restore) Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ensorflow \ python \ training\ саver.py ", строка 795, в _build_internal restore_sequential, измените форму) Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ensorflow \ python \ training \ saver.py ", строка 406, в файле _AddRestoreOps restore_sequentially)«C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ tenorflow \ python \ training \ saver.py», строка 862, в параметре bulk_restore вернуть io_ops.restore_v2 (имя_файла_initor, имена, фрагменты, типы файлов) Файл «C: \Пользователи \ Asus \ Anaconda3 \ lib \ site-packages \ tenorflow \ python \ ops \ gen_io_ops.py ", строка 1465, в restore_v2 shape_and_slices = shape_and_slices, dtypes = dtypes, name = name) Файл" C: \ Users \ Asus \ Anaconda3 "\ lib \ site-packages \ensorflow \ python \ framework \ op_def_library.py ", строка 787, в _apply_op_helper op_def = op_def) Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ensorflow \ python \ util \deprecation.py ", строка 488, в new_func возвращаем func (* args, ** kwargs) Файл" C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ тензор потока \ python \ framework \ ops.py ", строка 3274, в create_op op_def = op_def) Файл "C: \ Users \ Asus \ Anaconda3 \ lib \ site-pac"kages \ tenorflow \ python \ framework \ ops.py ", строка 1770, в init self._traceback = tf_stack.extract_stack ()
DataLossError (см. выше дляtraceback): невозможно открыть файл таблицы D: \ My Projects \ FinalProject_Vr_02 \ snakes-0.001-2conv-basic.model.meta: потеря данных: не sstable (неверное магическое число): возможно, ваш файл находится в другом формате ивам нужно использовать другой оператор восстановления?[[node save_1 / RestoreV2 (определено в C: \ Users \ Asus \ Anaconda3 \ lib \ site-packages \ tflearn \ helpers \ trainer.py: 147) = RestoreV2 [dtypes = [DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT,..., DT_FLOAT, DT_FLOAT, DT_BOOL, DT_FLOAT, DT_FLOAT], _device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0"] (_ arg_save_1 / Const_0_0,save_1 / RestoreV2 / tenor_names, save_1 / RestoreV2 / shape_and_slices)]]
Как это исправить?
import cv2
import numpy as np
import os
from random import shuffle
from tqdm import tqdm
TRAIN_DIR = 'D:\\My Projects\\Dataset\\dataset5_for_testing\\train'
TEST_DIR = 'D:\\My Projects\\Dataset\\dataset5_for_testing\\test'
IMG_SIZE = 50
LR = 1e-3
MODEL_NAME = 'snakes-{}-{}.model'.format(LR, '2conv-basic')
def label_img(img):
print("\nimg inside label_img",img)
print("\n",img.split('.')[-2])
temp_name= img.split('.')[-2]
#print("\n",temp_name[0:3])
#temp_name=temp_name[0:3]
print("\n",temp_name[:1])
temp_name=temp_name[:1]
#word_label = img.split('.')[-3]
word_label = temp_name
# word_label = img[0]
if word_label == 'A': return [0,0,0,0,1]
elif word_label == 'B': return [0,0,0,1,0]
elif word_label == 'C': return [0,0,1,0,0]
elif word_label == 'D': return [0,1,0,0,0]
elif word_label == 'E' : return [1,0,0,0,0]
def create_train_data():
training_data = []
for img in tqdm(os.listdir(TRAIN_DIR)):
label = label_img(img)
path = os.path.join(TRAIN_DIR,img)
img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (IMG_SIZE,IMG_SIZE))
training_data.append([np.array(img),np.array(label)])
shuffle(training_data)
np.save('train_data.npy', training_data)
return training_data
def process_test_data():
testing_data = []
for img in tqdm(os.listdir(TEST_DIR)):
path = os.path.join(TEST_DIR,img)
img_num = img.split('.')[0]
img = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (IMG_SIZE,IMG_SIZE))
testing_data.append([np.array(img), img_num])
shuffle(testing_data)
np.save('test_data.npy', testing_data)
return testing_data
train_data = create_train_data()
import tflearn
from tflearn.layers.conv import conv_2d, max_pool_2d
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.estimator import regression
import tensorflow as tf
tf.reset_default_graph()
convnet = input_data(shape=[None, IMG_SIZE, IMG_SIZE, 1], name='input')
convnet = conv_2d(convnet, 32, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 64, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 128, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 64, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = conv_2d(convnet, 32, 5, activation='relu')
convnet = max_pool_2d(convnet, 5)
convnet = fully_connected(convnet, 1024, activation='relu')
convnet = dropout(convnet, 0.8)
convnet = fully_connected(convnet, 5, activation='softmax')
convnet = regression(convnet, optimizer='adam', learning_rate=LR, loss='categorical_crossentropy', name='targets')
model = tflearn.DNN(convnet, tensorboard_dir='log')
if os.path.exists('{}.meta'.format(MODEL_NAME)):
model.load(MODEL_NAME)
print('model loaded!')
#train = train_data[:-500]
#test = train_data[-500:]
train = train_data[:-200]
test = train_data[-200:]
X = np.array([i[0] for i in train]).reshape(-1,IMG_SIZE,IMG_SIZE,1)
Y = [i[1] for i in train]
test_x = np.array([i[0] for i in test]).reshape(-1,IMG_SIZE,IMG_SIZE,1)
test_y = [i[1] for i in test]
model.fit({'input': X}, {'targets': Y}, n_epoch=3, validation_set=({'input': test_x}, {'targets': test_y}),
snapshot_step=500, show_metric=True, run_id=MODEL_NAME)
model.save(MODEL_NAME)
meta_path = 'snakes-0.001-2conv-basic.model.meta' # Your .meta file
#meta_path = os.path.join(MODEL_NAME)
#meta_path = os.path.join('snakes-{}-{}.model') # Your .meta file
with tf.Session() as sess:
# Restore the graph
#saver = tf.train.import_meta_graph(meta_path)
saver = model.load(meta_path)
# Load weights
saver.restore(sess,tf.train.latest_checkpoint('.'))
# Output nodes
output_node_names =[n.name for n in tf.get_default_graph().as_graph_def().node]
# Freeze the graph
frozen_graph_def = tf.graph_util.convert_variables_to_constants(
sess,
sess.graph_def,
output_node_names)
# Save the frozen graph
with open('output_graph.pb', 'wb') as f:
f.write(frozen_graph_def.SerializeToString())
model.save('output_graph.pb')
tf.contrib.lite.TFLiteConverter
converter = tf.contrib.lite.TFLiteConverter.from_saved_model('output_graph.pb')
#converter = tf.lite.TFLiteConverter.from_saved_model(MODEL_NAME)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
#file_writer = tf.summary.FileWriter('/path/to/logs', sess.graph)