Replace examples/image_retraining by a pointer to TensorFlow Hub.

https://github.com/tensorflow/hub/tree/master/examples/image_retraining
has the same tool, upgraded to use TensorFlow Hub instead of raw graph defs.

PiperOrigin-RevId: 192502469
This commit is contained in:
A. Unique TensorFlower 2018-04-11 13:48:43 -07:00 committed by TensorFlower Gardener
parent 3fa224a453
commit 1a36eb1550
6 changed files with 12 additions and 1698 deletions

View File

@ -1,51 +0,0 @@
# Description:
# Transfer learning example for TensorFlow.
licenses(["notice"]) # Apache 2.0
exports_files(["LICENSE"])
load("//tensorflow:tensorflow.bzl", "py_test")
py_binary(
name = "retrain",
srcs = [
"retrain.py",
],
srcs_version = "PY2AND3",
visibility = ["//tensorflow:__subpackages__"],
deps = [
"//tensorflow:tensorflow_py",
"//tensorflow/python:framework",
"//tensorflow/python:framework_for_generated_wrappers",
"//tensorflow/python:graph_util",
"//tensorflow/python:platform",
"//tensorflow/python:util",
"//third_party/py/numpy",
],
)
py_test(
name = "retrain_test",
size = "small",
srcs = [
"retrain.py",
"retrain_test.py",
],
data = [
":data/labels.txt",
"//tensorflow/examples/label_image:data/grace_hopper.jpg",
],
srcs_version = "PY2AND3",
deps = [
":retrain",
"//tensorflow:tensorflow_py",
"//tensorflow/python:framework_test_lib",
"//tensorflow/python:graph_util",
"//tensorflow/python:platform",
"//tensorflow/python:platform_test",
"//tensorflow/python:tensor_shape",
"//tensorflow/python:util",
"//third_party/py/numpy",
],
)

View File

@ -1,12 +1,15 @@
**NOTE: This code has moved to**
https://github.com/tensorflow/hub/tree/master/examples/image_retraining
retrain.py is an example script that shows how one can adapt a pretrained
network for other classification problems. A detailed overview of this script
can be found at:
https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0
The script also shows how one can train layers
with quantized weights and activations instead of taking a pre-trained floating
point model and then quantizing weights and activations.
The output graphdef produced by this script is compatible with the TensorFlow
Lite Optimizing Converter and can be converted to TFLite format.
network for other classification problems (including use with TFLite and
quantization).
As of TensorFlow 1.7, it is recommended to use a pretrained network from
TensorFlow Hub, using the new version of this example found in the location
above, as explained in TensorFlow's revised [image retraining
tutorial](https://www.tensorflow.org/tutorials/image_retraining).
Older versions of this example (using frozen GraphDefs instead of
TensorFlow Hub modules) are available in the release branches of
TensorFlow versions up to and including 1.7.

View File

@ -1,3 +0,0 @@
Runner-up
Winner
Loser

File diff suppressed because it is too large Load Diff

View File

@ -1,148 +0,0 @@
# Copyright 2015 The TensorFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================
# pylint: disable=g-bad-import-order,unused-import
"""Tests the graph freezing tool."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import tensorflow as tf
import os
from tensorflow.examples.image_retraining import retrain
from tensorflow.python.framework import test_util
class ImageRetrainingTest(test_util.TensorFlowTestCase):
def dummyImageLists(self):
return {'label_one': {'dir': 'somedir', 'training': ['image_one.jpg',
'image_two.jpg'],
'testing': ['image_three.jpg', 'image_four.jpg'],
'validation': ['image_five.jpg', 'image_six.jpg']},
'label_two': {'dir': 'otherdir', 'training': ['image_one.jpg',
'image_two.jpg'],
'testing': ['image_three.jpg', 'image_four.jpg'],
'validation': ['image_five.jpg', 'image_six.jpg']}}
def testGetImagePath(self):
image_lists = self.dummyImageLists()
self.assertEqual('image_dir/somedir/image_one.jpg', retrain.get_image_path(
image_lists, 'label_one', 0, 'image_dir', 'training'))
self.assertEqual('image_dir/otherdir/image_four.jpg',
retrain.get_image_path(image_lists, 'label_two', 1,
'image_dir', 'testing'))
def testGetBottleneckPath(self):
image_lists = self.dummyImageLists()
self.assertEqual('bottleneck_dir/somedir/image_five.jpg_imagenet_v3.txt',
retrain.get_bottleneck_path(
image_lists, 'label_one', 0, 'bottleneck_dir',
'validation', 'imagenet_v3'))
def testShouldDistortImage(self):
self.assertEqual(False, retrain.should_distort_images(False, 0, 0, 0))
self.assertEqual(True, retrain.should_distort_images(True, 0, 0, 0))
self.assertEqual(True, retrain.should_distort_images(False, 10, 0, 0))
self.assertEqual(True, retrain.should_distort_images(False, 0, 1, 0))
self.assertEqual(True, retrain.should_distort_images(False, 0, 0, 50))
def testAddInputDistortions(self):
with tf.Graph().as_default():
with tf.Session() as sess:
retrain.add_input_distortions(True, 10, 10, 10, 299, 299, 3, 128, 128)
self.assertIsNotNone(sess.graph.get_tensor_by_name('DistortJPGInput:0'))
self.assertIsNotNone(sess.graph.get_tensor_by_name('DistortResult:0'))
@tf.test.mock.patch.object(retrain, 'FLAGS', learning_rate=0.01)
def testAddFinalRetrainOps(self, flags_mock):
with tf.Graph().as_default():
with tf.Session() as sess:
bottleneck = tf.placeholder(tf.float32, [1, 1024], name='bottleneck')
# Test creating final training op with quantization.
retrain.add_final_retrain_ops(5, 'final', bottleneck, 1024, False,
False)
self.assertIsNotNone(sess.graph.get_tensor_by_name('final:0'))
@tf.test.mock.patch.object(retrain, 'FLAGS', learning_rate=0.01)
def testAddFinalRetrainOpsQuantized(self, flags_mock):
# Ensure that the training and eval graph for quantized models are correctly
# created.
with tf.Graph().as_default() as g:
with tf.Session() as sess:
bottleneck = tf.placeholder(tf.float32, [1, 1024], name='bottleneck')
# Test creating final training op with quantization, set is_training to
# true.
retrain.add_final_retrain_ops(5, 'final', bottleneck, 1024, True, True)
self.assertIsNotNone(sess.graph.get_tensor_by_name('final:0'))
found_fake_quant = 0
for op in g.get_operations():
if op.type == 'FakeQuantWithMinMaxVars':
found_fake_quant += 1
# Ensure that the inputs of each FakeQuant operations has 2 Assign
# operations in the training graph (Assign[Min,Max]Last,
# Assign[Min,Max]Ema)
self.assertEqual(2,
len([i for i in op.inputs if 'Assign' in i.name]))
self.assertEqual(found_fake_quant, 2)
with tf.Graph().as_default() as g:
with tf.Session() as sess:
bottleneck = tf.placeholder(tf.float32, [1, 1024], name='bottleneck')
# Test creating final training op with quantization, set is_training to
# false.
retrain.add_final_retrain_ops(5, 'final', bottleneck, 1024, True, False)
self.assertIsNotNone(sess.graph.get_tensor_by_name('final:0'))
found_fake_quant = 0
for op in g.get_operations():
if op.type == 'FakeQuantWithMinMaxVars':
found_fake_quant += 1
for i in op.inputs:
# Ensure that no operations are Assign operation since this is the
# evaluation graph.
self.assertTrue('Assign' not in i.name)
self.assertEqual(found_fake_quant, 2)
def testAddEvaluationStep(self):
with tf.Graph().as_default():
final = tf.placeholder(tf.float32, [1], name='final')
gt = tf.placeholder(tf.int64, [1], name='gt')
self.assertIsNotNone(retrain.add_evaluation_step(final, gt))
def testAddJpegDecoding(self):
with tf.Graph().as_default():
jpeg_data, mul_image = retrain.add_jpeg_decoding(10, 10, 3, 0, 255)
self.assertIsNotNone(jpeg_data)
self.assertIsNotNone(mul_image)
def testCreateModelInfo(self):
did_raise_value_error = False
try:
retrain.create_model_info('no_such_model_name')
except ValueError:
did_raise_value_error = True
self.assertTrue(did_raise_value_error)
model_info = retrain.create_model_info('inception_v3')
self.assertIsNotNone(model_info)
self.assertEqual(299, model_info['input_width'])
def testCreateModelInfoQuantized(self):
# Test for mobilenet_quantized
model_info = retrain.create_model_info('mobilenet_1.0_224')
self.assertIsNotNone(model_info)
self.assertEqual(224, model_info['input_width'])
if __name__ == '__main__':
tf.test.main()