Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用变频器时预测时间长。VGG16模型和Tensorflow lite中的优化_Python_Tensorflow_Machine Learning_Tensorflow Lite - Fatal编程技术网

Python 使用变频器时预测时间长。VGG16模型和Tensorflow lite中的优化

Python 使用变频器时预测时间长。VGG16模型和Tensorflow lite中的优化,python,tensorflow,machine-learning,tensorflow-lite,Python,Tensorflow,Machine Learning,Tensorflow Lite,我写了一个基于VGG16的模型,我只添加了两个额外的卷积层。输出是一个大小为16x16x1的数组,它只是简单二进制分类的结果。我使用了TensorFlow lite,代码基于可用的文档。问题是,当我使用该模型进行预测时,需要很长时间(近5分钟)才能给出结果。 我在GPU、Python 3.7上使用Tensorflow 2.4,我的图形卡是GTX 1660Ti(移动版),CPU是intel i7 9750H。 代码如下所示 import tensorflow as tf import os imp

我写了一个基于VGG16的模型,我只添加了两个额外的卷积层。输出是一个大小为16x16x1的数组,它只是简单二进制分类的结果。我使用了TensorFlow lite,代码基于可用的文档。问题是,当我使用该模型进行预测时,需要很长时间(近5分钟)才能给出结果。 我在GPU、Python 3.7上使用Tensorflow 2.4,我的图形卡是GTX 1660Ti(移动版),CPU是intel i7 9750H。
代码如下所示

import tensorflow as tf
import os
import time
import numpy as np
import cv2
import keras
import pathlib

saved_model_dir= 'model/'
saved_modelh5 = 'model.h5'
dataset_path = 'bound box dataset/img'
out_path = 'converted_model.tflite'
num_calibration_steps = 10


#-----------------------------------------------------------
images = []
for file in os.listdir(dataset_path):
    img = cv2.imread( os.path.join(dataset_path,file) )
    images.append(img)
images = np.array( images )

imgs_tensor = tf.cast( images, dtype = tf.float32)/255.0
ds = tf.data.Dataset.from_tensor_slices((imgs_tensor)).batch(1)
print('data loaded')

#-----------------------------------------------------------
def representative_dataset_gen():
  for input_value in ds.take(num_calibration_steps):
    yield [input_value]




#converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter = tf.lite.TFLiteConverter.from_keras_model(keras.models.load_model(saved_modelh5))  
converter.optimizations = [tf.lite.Optimize.DEFAULT ]
#converter.representative_dataset = tf.lite.RepresentativeDataset( representative_dataset_gen )
#converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
tflite_model = converter.convert()


#------------------------------------------------------------
#with open(out_path, "wb")as f:
#    f.write(tflite_model)
print('converted')
tflite_model_file = pathlib.Path(out_path)
tflite_model_file.write_bytes(tflite_model)
print('Saved')



img = cv2.imread('bound box dataset/img/1.png')
input_data = img.reshape(1,512,512,3).astype(np.float32)/255.0

interpreter = tf.lite.Interpreter( model_content = tflite_model)
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# Test model on random input data.
t = time.time()
input_shape = input_details[0]['shape']
#input_data = np.array(np.random.random_sample(input_shape), dtype=np.float32)
interpreter.set_tensor(input_details[0]['index'], input_data)

interpreter.invoke()

# The function `get_tensor()` returns a copy of the tensor data.
# Use `tensor()` in order to get a pointer to the tensor.
output_data = interpreter.get_tensor(output_details[0]['index'])

t = time.time() - t
print('predict time:',t)


首先,你的GPU没有计算这个预测。您必须使用cuda将数据传输到gpu,但这不是必需的

  • 将图像重塑为(256256)甚至更低,大小为(512512)的图像对于VGG输入来说是非常大的一倍。这就是为什么你的计算要花这么长时间

  • 我的下一个建议是改用更新的体系结构,比如ResNet50


  • 好的,所以我发现了一些新的东西。当我初始化
    converter.optimizations
    converter.representative\u数据集
    时,预测时间会上升到大约5分钟。但当我不初始化它们时,预测值下降到大约一秒钟。知道为什么吗?还有一件事,我正在使用Windows 10,它已更新到最新版本。您认为切换到Linux基本操作系统会对其产生影响吗?