Повышение точности модели классификации изображений - PullRequest
0 голосов
/ 06 апреля 2020

Моя цель - построить модель классификации изображений для цветов. RAR-файл данных состоит из папки с именем train data, которая состоит из примерно 16000 изображений, помеченных от 0 до 16000. Аналогичным образом, имеется папка для данных испытаний.

Помимо этого есть две книги CSV. Первая рабочая книга csv состоит из двух атрибутов - класса label и flower. Есть 104 этикетки и классы цветов. Вторая рабочая тетрадь также состоит из двух атрибутов - класса id и flower. Этот CSV является связующим звеном между папкой с изображениями поездов и классами цветов. ID является атрибутом связи. Т.е., например, предположим, что изображение с меткой 10 в папке изображений поездов является изображением подсолнуха. Следовательно, в книге CSV запись класса цветов, соответствующая id = 10, является подсолнухом. Например, предположим, что изображение с меткой 10 в папке данных поезда является подсолнухом. Следовательно, во (второй) книге запись класса цветов, соответствующая id = 10, является подсолнухом.

Это мой код

# Import relavant libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
import keras
from keras.models import Sequential
from keras.layers import Dense, Flatten
from sklearn.model_selection import train_test_split
from PIL import Image

# Load the csv files
# Workbook no.1 
label_csv = pd.read_csv('/content/flowers_label.csv')
# Workbook no.2
train = pd.read_csv('/content/flowers_idx.csv')

# To sort the train csv id wise from 0 - 16464
train.sort_values('id')

# Creating inputs and targets
X = [] #images
y = [] # labels

base = "/content/flower_tpu/flower_tpu/flowers_google/flowers_google//"

row = 0;
for idx in range(len(train)):
  # get the flower row
  flower = train.iloc[idx]
  # create flower path
  path = f"{base}{flower.id}.jpeg"
  #load image
  img = Image.open(path)
  # convert to numpy
  img = np.array(img)
  #save to X
  X.append(img)

  # get label
  label = label_csv[label_csv['flower_class'] == flower.flower_cls].label.values[0]
  # save to y
  y.append(label)

# Train Validation split
X_train, X_validation, y_train, y_validation = train_test_split(X, y, random_state=12, test_size=0.2)


# The model
output_size = 104
hidden_layer_size = 150
model = tf.keras.Sequential([
                            tf.keras.layers.Flatten(input_shape=(224, 224, 3)),
                            tf.keras.layers.Dense(hidden_layer_size, activation='relu'),
                            tf.keras.layers.Dense(hidden_layer_size, activation='relu'),
                            tf.keras.layers.Dense(output_size, activation='softmax')
                            ])


# Converting all data into ndarrays
X_train = np.asarray(X_train)
y_train = np.asarray(y_train)
X_validation = np.asarray(X_validation)
y_validation = np.asarray(y_validation)


# Compilation
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])


# Fitting
model.fit(X_train, y_train, epochs=3, validation_data=(X_validation, y_validation), validation_steps=10, verbose =2)

Я код выполняется, но поезд и точность проверки столь же бедный как 6%. : / Как я могу улучшить этот код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...