Я новичок в TensorFlow. Мне нужна помощь по распознаванию изображений, где я могу обучить свой собственный набор данных.
Есть ли какой-нибудь пример для обучения нового набора данных?
Я новичок в TensorFlow. Мне нужна помощь по распознаванию изображений, где я могу обучить свой собственный набор данных.
Есть ли какой-нибудь пример для обучения нового набора данных?
Если вас интересует, как вводить собственные данные в TensorFlow, вы можете посмотреть это руководство.
Я также написал руководство с лучшими практиками для CS230 в Стэнфорде здесь.
tf.data
) и с ярлыкамиС введением tf.data
в r1.4
мы можем создавать пакеты изображений без заполнителей и без очередей. Шаги следующие:
tf.data.Dataset
чтение этих имен файлов и метокtf.data.Dataset
, который даст следующий пакетКод такой:
# step 1
filenames = tf.constant(['im_01.jpg', 'im_02.jpg', 'im_03.jpg', 'im_04.jpg'])
labels = tf.constant([0, 1, 0, 1])
# step 2: create a dataset returning slices of `filenames`
dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
# step 3: parse every image in the dataset using `map`
def _parse_function(filename, label):
image_string = tf.read_file(filename)
image_decoded = tf.image.decode_jpeg(image_string, channels=3)
image = tf.cast(image_decoded, tf.float32)
return image, label
dataset = dataset.map(_parse_function)
dataset = dataset.batch(2)
# step 4: create iterator and final input tensor
iterator = dataset.make_one_shot_iterator()
images, labels = iterator.get_next()
Теперь мы можем работать напрямую sess.run([images, labels])
, не передавая никаких данных через заполнители.
Подводя итог, у вас есть несколько шагов:
Самый простой код:
# step 1
filenames = ['im_01.jpg', 'im_02.jpg', 'im_03.jpg', 'im_04.jpg']
# step 2
filename_queue = tf.train.string_input_producer(filenames)
# step 3: read, decode and resize images
reader = tf.WholeFileReader()
filename, content = reader.read(filename_queue)
image = tf.image.decode_jpeg(content, channels=3)
image = tf.cast(image, tf.float32)
resized_image = tf.image.resize_images(image, [224, 224])
# step 4: Batching
image_batch = tf.train.batch([resized_image], batch_size=8)
tf.train.batch
или tf.train.shuffle_batch
должен быть список [image]
, а не просто image
. Я исправил это в коде.
- person Olivier Moindrot; 23.05.2016
image_batch, label_batch = tf.train.batch([resized_image, label], batch_size=8)
. Затем вам нужно создать модель с изображениями в качестве входных и меток в качестве выходных, см. это руководство для получения дополнительной информации.
- person Olivier Moindrot; 24.05.2016
resized_image = tf.image.resize_images(images, 224, 224)
Здесь первым аргументом метода resize_images должно быть изображение, а не изображения, верно?
- person iamas; 01.01.2017
.tif
- person Sakhri Houssem; 05.02.2018
tf.image.decode_gif
и этот мой DataSetGen код, но я не знаю, правильно ли это
- person Sakhri Houssem; 06.02.2018
OutOfRange
.
- person Olivier Moindrot; 12.04.2019
_parse_function
, чтобы прочитать файл .mat
- person Olivier Moindrot; 02.09.2019
tf.read_file(filename)
на tf.io.read_file(filename)
- person Mehdi Zare; 20.07.2020
_parse_function
- person Olivier Moindrot; 08.04.2021
На основе ответа @ olivier-moindrot, но для Tensorflow 2.0+:
# step 1
filenames = tf.constant(['im_01.jpg', 'im_02.jpg', 'im_03.jpg', 'im_04.jpg'])
labels = tf.constant([0, 1, 0, 1])
# step 2: create a dataset returning slices of `filenames`
dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
def im_file_to_tensor(file, label):
def _im_file_to_tensor(file, label):
path = f"../foo/bar/{file.numpy().decode()}"
im = tf.image.decode_jpeg(tf.io.read_file(path), channels=3)
im = tf.cast(image_decoded, tf.float32) / 255.0
return im, label
return tf.py_function(_im_file_to_tensor,
inp=(file, label),
Tout=(tf.float32, tf.uint8))
dataset = dataset.map(im_file_to_tensor)
Если вы столкнулись с проблемой, похожей на:
ValueError: невозможно взять длину формы с неизвестным рангом
при передаче тензоров tf.data.Dataset в model.fit взгляните на https://github.com/tensorflow/tensorflow/issues/24520. Исправление для приведенного выше фрагмента кода:
def im_file_to_tensor(file, label):
def _im_file_to_tensor(file, label):
path = f"../foo/bar/{file.numpy().decode()}"
im = tf.image.decode_jpeg(tf.io.read_file(path), channels=3)
im = tf.cast(image_decoded, tf.float32) / 255.0
return im, label
file, label = tf.py_function(_im_file_to_tensor,
inp=(file, label),
Tout=(tf.float32, tf.uint8))
file.set_shape([192, 192, 3])
label.set_shape([])
return (file, label)
Совместимый ответ 2.0 с использованием Tensorflow Hub: Tensorflow Hub
- это предложение / продукт, предлагаемый Tensorflow
, который включает модели, разработанные Google для наборов данных текста и изображений.
Это saves Thousands of Hours of Training Time and Computational Effort
, так как повторно использует существующую предварительно обученную модель.
Если у нас есть набор данных изображений, мы можем взять существующие предварительно обученные модели из TF Hub и адаптировать их к нашему набору данных.
Код для повторного обучения нашего набора данных изображений с использованием предварительно обученной модели MobileNet показан ниже:
import itertools
import os
import matplotlib.pylab as plt
import numpy as np
import tensorflow as tf
import tensorflow_hub as hub
module_selection = ("mobilenet_v2_100_224", 224) #@param ["(\"mobilenet_v2_100_224\", 224)", "(\"inception_v3\", 299)"] {type:"raw", allow-input: true}
handle_base, pixels = module_selection
MODULE_HANDLE ="https://tfhub.dev/google/imagenet/{}/feature_vector/4".format(handle_base)
IMAGE_SIZE = (pixels, pixels)
print("Using {} with input size {}".format(MODULE_HANDLE, IMAGE_SIZE))
BATCH_SIZE = 32 #@param {type:"integer"}
#Here we need to Pass our Dataset
data_dir = tf.keras.utils.get_file(
'flower_photos',
'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
untar=True)
model = tf.keras.Sequential([
hub.KerasLayer(MODULE_HANDLE, trainable=do_fine_tuning),
tf.keras.layers.Dropout(rate=0.2),
tf.keras.layers.Dense(train_generator.num_classes, activation='softmax',
kernel_regularizer=tf.keras.regularizers.l2(0.0001))
])
model.build((None,)+IMAGE_SIZE+(3,))
model.summary()
Полный код для руководства по переобучению изображений можно найти по этой ссылке на Github < / а>.
Дополнительную информацию о Tensorflow Hub можно найти в этом блоге TF а>.
Предварительно обученные модули, связанные с изображениями, можно найти в этом Ссылка на TF Hub.
Все предварительно обученные модули, связанные с изображениями, текстом, видео и т. Д., Можно найти по этой ссылке на модули TF HUB а>.
Наконец, это базовая страница для Tensorflow Hub.