автордың кітабынан сөз тіркестері Искусственный интеллект и компьютерное зрение. Реальные проекты на Python, Keras и TensorFlow
Отдельные компании, занимающиеся разметкой, — Appen и Scale.AI
ResNet50()
Когда эта модель используется в режиме прогнозирования, ее результаты включают оценки вероятности принадлежности к каждому классу. В Keras также имеется функция decode_predictions, которая сообщает вероятность принадлежности объектов в изображении к каждой категории.
Модели МО работают эффективнее, когда на вход подаются данные в соответствующем диапазоне. Обычно используются диапазоны [0,1] и [–1,1]. Учитывая, что значения пикселей в изображении находятся в диапазоне от 0 до 255, вызов функции preprocess_input из Keras для входных изображений нормализует каждый пиксель до стандартного диапазона.
Если у вас есть графический процессор NVIDIA, то установите соответствующие драйверы, затем библиотеку CUDA, затем библиотеку cuDNN, затем пакет Tensorflow-gpu.
Был разработан метод под названием «перенос обучения» (transfer learning), который позволяет настраивать модели с использованием небольших датасетов, насчитывающих всего несколько сотен образцов, при условии, что эти модели предварительно были обучены на более крупных наборах, аналогичных текущему
Рис. 1.8. Ингредиенты для идеального решения задачи глубокого обучения
Рассмотрим каждый из них поближе.
и их влиянием на точность и скорость:
pca_dimensions = [1,2,3,4,5,10,20,50,75,100,150,200]
pca_accuracy = []
pca_time = []
for dimensions in pca_dimensions:
# найти главные компоненты
pca = PCA(n_components = dimensions)
pca.fit(feature_list)
feature_list_compressed = pca.transform(feature_list[:])
# Вычислить точность, обеспечиваемую сокращенным набором признаков
accuracy, time_taken = accuracy_calculator(feature_list_compressed[:])
pca_time.append(time_taken)
pca_accuracy.append(accuracy)
print("For PCA Dimensions = ", dimensions, ",\tAccuracy = ",accuracy,"%",
",\tTime = ", pca_time[-1])
# Применить метод главных компонент к векторам признаков
num_feature_dimensions=100 # Задать число признаков
pca = PCA(n_components = num_feature_dimensions)
pca.fit(featureList)
feature_list_compressed = pca.transform(featureList)
# Для скорости проанализируем только первую половину датасета.
selected_features = feature_list_compressed[:4000]
selected_class_ids = class_ids[:4000]
selected_filenames = filenames[:4000]
tsne_results =
TSNE(n_components=2,verbose=1,metric='euclidean')
.fit_transform(selected_features)
# Построить диаграмму рассеяния из результатов, полученных с помощью
# алгоритма t-SNE
colormap = plt.cm.get_cmap('coolwarm')
scatter_plot = plt.scatter(tsne_results[:,0],tsne_results[:,1],
c = selected_class_ids, cmap=colormap)
plt.colorbar(scatter_plot)
plt.show()
функции, которая выполняет рекурсивный поиск всех файлов изображений (по расширениям) в каталоге:
extensions = ['.jpg', '.JPG', '.jpeg', '.JPEG', '.png', '.PNG']
def get_file_list(root_dir):
file_list = []
counter = 1
for root, directories, filenames in os.walk(root_dir):
for filename in filenames:
if any(ext in filename for ext in extensions):
file_list.append(os.path.join(root, filename))
counter += 1
return file_list
Прежде чем перейти к ответам на эти вопросы, сделаем прогнозы для всех изображений в проверочном датасете. Настроим пайплайн:
# Переменные
IMG_WIDTH, IMG_HEIGHT = 224, 224
VALIDATION_DATA_DIR = 'data/val_data/'
VALIDATION_BATCH_SIZE = 64
# Генераторы данных
validation_datagen = ImageDataGenerator(
preprocessing_function=preprocess_input)
validation_generator = validation_datagen.flow_from_directory(
VALIDATION_DATA_DIR,
target_size=(IMG_WIDTH, IMG_HEIGHT),
batch_size=VALIDATION_BATCH_SIZE,
shuffle=False,
class_mode='categorical')
ground_truth = validation_generator.classes
Затем получим прогнозы:
predictions = model.predict_generator(validation_generator)
Чтобы упростить анализ, создадим словарь, в котором для каждого изображения сохраним индекс и его истинный класс (ожидаемый прогноз):
# prediction_table - это словарь (dict) с индексом, прогнозом и истинным
# классом (ground truth)
prediction_table = {}
for index, val in enumerate(predictions):
# получить индекс argmax
index_of_highest_probability = np.argmax(val)
value_of_highest_probability = val[index_of_highest_probability]
prediction_table[index] = [value_of_highest_probability,
index_of_highest_probability,
ground_truth[index]]
assert len(predictions) == len(ground_truth) == len(prediction_table)
