深度学习已成功应用于几种大型数据集,用于对少数几个类别(猫,狗,汽车,飞机等)进行分类,其性能优于诸如SIFT上的功能包,颜色直方图等更简单的描述符。
然而,训练这样的网络需要每节课大量数据和大量训练时间。但是,在花时间设计和训练这种设备并收集训练数据之前,通常很多人没有足够的数据,或者只是想了解卷积神经网络的性能。
在这种特定情况下,理想的情况是使用最先进的出版物使用的一些基准数据集来配置和培训网络,并将其简单地应用于可能用作特征提取器的某些数据集。
这样就为每个图像生成了一组功能,可以将这些功能提供给经典的分类方法,例如SVM,逻辑回归,神经网络等。
特别是当一个人没有足够的数据来训练CNN时,我可能会认为它的表现要好于对CNN进行少量样本训练的管道。
我当时在看tensorflow教程,但它们似乎总是有一个清晰的培训/测试阶段。我找不到带有预配置的CNN功能提取器的泡菜文件(或类似文件)。
我的问题是:是否存在这样的经过预先训练的网络,在哪里可以找到它们。或者:这种方法有意义吗?在哪里可以找到CNN +权重?
我尝试使用EDIT Wrt @john的注释'DecodeJpeg:0'
,'DecodeJpeg/contents:0'
并检查了不同的输出(:S)
import cv2, requests, numpy
import tensorflow.python.platform
import tensorflow as tf
response = requests.get('https://i.stack.imgur.com/LIW6C.jpg?s=328&g=1')
data = numpy.asarray(bytearray(response.content), dtype=np.uint8)
image = cv2.imdecode(data,-1)
compression_worked, jpeg_data = cv2.imencode('.jpeg', image)
if not compression_worked:
raise Exception("Failure when compressing image to jpeg format in opencv library")
jpeg_data = jpeg_data.tostring()
with open('./deep_learning_models/inception-v3/classify_image_graph_def.pb', 'rb') as graph_file:
graph_def = tf.GraphDef()
graph_def.ParseFromString(graph_file.read())
tf.import_graph_def(graph_def, name='')
with tf.Session() as sess:
softmax_tensor = sess.graph.get_tensor_by_name('pool_3:0')
arr0 = numpy.squeeze(sess.run(
softmax_tensor,
{'DecodeJpeg:0': image}
))
arr1 = numpy.squeeze(sess.run(
softmax_tensor,
{'DecodeJpeg/contents:0': jpeg_data}
))
print(numpy.abs(arr0 - arr1).max())
所以最大绝对差值1.27649
,和一般所有的元件不同(特别是因为所平均值arr0
和arr1
本身位于0之间- 0.5)。
我还希望它'DecodeJpeg:0'
需要一个jpeg字符串,而不是一个numpy数组,为什么该名称还包含'Jpeg'。@john:您能说出您对自己的评论有多确定吗?
所以我想我不确定是什么,因为我期望训练有素的神经网络是确定性的(但最多是混乱的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句