Повышенная точность проверки во время обученияPython

Программы на Python
Ответить
Anonymous
 Повышенная точность проверки во время обучения

Сообщение Anonymous »

Я пытаюсь написать модель для «перевода» языка жестов в реальном времени. Я пытаюсь сделать это следующим образом: https://github.com/dgovor/Sign-Language-Translator, но с набором данных. Я использую ASL Citizen в качестве набора данных, из которого извлекаю ключевые точки с помощью медиапайпа, которые затем использую в качестве набора данных. Набор данных изначально разделен на Тестовые — 30 тысяч видео, Обучающие — 40 тысяч, Валидационные — 12 тысяч и содержит 2300 классов. К сожалению, каждая модель, которую я написал до сих пор, и методы изменения данных не позволяют изучить модель более чем на 70%, что довольно странно, потому что я делал такие вещи, как:
  • первоначально данные были разделены максимум на 200 кадров (форма данных — (200, 126))
  • заполнение и маскирование до значения -999
  • ограничение количества данных максимум 100 кадров и взятие каждого второго кадра, если более 200 кадров (форма данных - (100, 126))
  • без маскировки и значения заполнения 0,0
  • взвешивание классов
  • различные размеры пакетов
  • использование SMOTE с изменением данных в 2D-массивы
  • изменение суммы данных в тестировании, обучении и проверке папки на: 10k, 59k, 13k и повторяя описанные выше шаги
  • используя и проверяя другие разные модели каждым из вышеперечисленных способов
    И независимо от того, имеют ли данные другую форму или более данных обучения, результат остается прежним и обучается максимум около 70%, что более странно, так это обучение, имеющее, например, такие значения:

Код: Выделить всё

Epoch 1/5000
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - categorical_accuracy: 3.4063e-04 - loss: 7.9569
Epoch 1: val_categorical_accuracy improved from -inf to 0.00300, saving model to Model/model.keras
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 102s 53ms/step - categorical_accuracy: 3.4087e-04 - loss: 7.9568 - val_categorical_accuracy: 0.0030 - val_loss: 7.1603 - learning_rate: 5.0000e-04
Epoch 2/5000
1849/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 48ms/step - categorical_accuracy: 0.0056 - loss: 6.8887
Epoch 2: val_categorical_accuracy improved from 0.00300 to 0.03792, saving model to Model/model.keras
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 95s 51ms/step - categorical_accuracy: 0.0056 - loss: 6.8883 - val_categorical_accuracy: 0.0379 - val_loss: 5.6242 - learning_rate: 5.0000e-04
Epoch 3/5000
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 48ms/step - categorical_accuracy: 0.0525 - loss: 5.3936
Epoch 3: val_categorical_accuracy improved from 0.03792 to 0.11668, saving model to Model/model.keras
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 96s 52ms/step - categorical_accuracy: 0.0526 - loss: 5.3934 - val_categorical_accuracy: 0.1167 - val_loss: 4.4322 - learning_rate: 5.0000e-04
Epoch 4/5000
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 49ms/step - categorical_accuracy: 0.1578 - loss: 4.1421
Epoch 4: val_categorical_accuracy improved from 0.11668 to 0.19252, saving model to Model/model.keras
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 97s 52ms/step - categorical_accuracy: 0.1578 - loss: 4.1420 - val_categorical_accuracy: 0.1925 - val_loss: 3.7442 - learning_rate: 5.0000e-04
Epoch 5/5000
1849/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 50ms/step - categorical_accuracy: 0.2696 - loss: 3.3104
Epoch 5: val_categorical_accuracy improved from 0.19252 to 0.37574, saving model to Model/model.keras
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 100s 54ms/step - categorical_accuracy: 0.2696 - loss: 3.3104 - val_categorical_accuracy: 0.3757 - val_loss: 2.6425 - learning_rate: 5.0000e-04
Как вы можете видеть, точность Val в начале выше, чем точность обучения, и я думаю, что этого не должно происходить, потому что мой отсев составляет всего 0,1, позже в обучении все по-другому, и точность обучения выше:

Код: Выделить всё

Epoch 81/5000
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 79ms/step - categorical_accuracy: 0.8465 - loss: 0.4662
Epoch 81: val_categorical_accuracy did not improve from 0.67887
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 155s 84ms/step - categorical_accuracy: 0.8465 - loss: 0.4663 - val_categorical_accuracy: 0.6658 - val_loss: 1.7038 - learning_rate: 5.0000e-04
Epoch 82/5000
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 0s 78ms/step - categorical_accuracy: 0.8478 - loss: 0.4656
Epoch 82: val_categorical_accuracy did not improve from 0.67887
1850/1850 ━━━━━━━━━━━━━━━━━━━━ 154s 83ms/step - categorical_accuracy: 0.8478 - loss: 0.4656 - val_categorical_accuracy: 0.6645 - val_loss: 1.6863 - learning_rate:  5.0000e-04
Epoch 83/5000
На данный момент лучшая модель:

Код: Выделить всё

def __init__(self, input_shape, word_labels, mask_value):
self.input_shape = input_shape
self.word_labels = word_labels
self.mask_value = mask_value

self.model = self.build_model()

def build_model(self, activation="leaky_relu"):
data = Input(name='input', shape=self.input_shape)

#masked_data = Masking(mask_value=self.mask_value)(data)

# LSTM Layer
x = LSTM(units=64, return_sequences=True, activation='relu')(data)
x = BatchNormalization()(x)
x = Dropout(0.1)(x)

# GRU Layer
x = GRU(units=128, return_sequences=False, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(0.1)(x)

# Dense Layer for feature extraction
x = Dense(units=256, activation='relu')(x)
x = BatchNormalization()(x)
x = Dropout(0.1)(x)

output = Dense(self.word_labels.shape[0], activation="softmax")(x)

model = Model(inputs=data, outputs=output)

return model

def compile_model(self):
optimizer = keras.optimizers.Adam(learning_rate=0.0005)
loss = 'categorical_crossentropy'
metrics = ['categorical_accuracy']
self.model.compile(loss=loss, optimizer=optimizer, metrics=metrics)
И то, как я тренируюсь, похоже на tkis:

Код: Выделить всё

print("Loading Data...")

integer_train_labels = np.argmax(self.train_num_labels, axis=1)
class_counts = Counter(integer_train_labels)
total_samples = len(integer_train_labels)
num_classes = len(self.word_labels)
class_weight = {cls:  total_samples / (count * num_classes) for cls, count in class_counts.items()}

print("Finished Loading Data...")

print("Creating Model...")

if os.path.exists("Model/model.keras"):
input_shape = (self.max_frames, 126)
SLR_Model = self.SLR_Model(input_shape, self.word_labels, self.mask_value)
SLR_Model.compile_model()
SLR_Model.model.load_weights("Model/model.keras")
print(SLR_Model.model.get_weights())
new_model = False
else:
input_shape = (self.max_frames, 126)
SLR_Model = self.SLR_Model(input_shape, self.word_labels, self.mask_value)
SLR_Model.compile_model()
SLR_Model.summary(line_length=110)
print(SLR_Model.model.get_weights())
new_model = True

print("Model Created...")

print("Training Model...")

backup = BackupAndRestore(backup_dir="Model/backup")
earlystopper = EarlyStopping(monitor='val_categorical_accuracy', patience=50, verbose=1, mode='max')
checkpoint = ModelCheckpoint("Model/model.keras", monitor='val_categorical_accuracy', verbose=1, save_best_only=True, mode='max')
trainLogger = TrainLogger("Model")
tb_callback = TensorBoard('Model/logs', update_freq=1)
reduceLROnPlat = ReduceLROnPlateau(monitor='val_categorical_accuracy', factor=0.9, min_delta=1e-10, patience=25, verbose=1,
mode='auto')

is_Trained = False

if is_Trained is False:
if new_model is True:
SLR_Model.train(self.train_keypoints,
self.train_num_labels,
epochs=self.epochs,
callbacks=[backup, earlystopper, checkpoint, trainLogger, reduceLROnPlat, tb_callback],
x_val=self.val_keypoints,
y_val=self.val_num_labels,
batch_size=self.batch_size,
class_weight=class_weight)
else:
SLR_Model.train(self.train_keypoints,
self.train_num_labels,
epochs=self.epochs,
callbacks=[backup, earlystopper, checkpoint, trainLogger, reduceLROnPlat, tb_callback],
x_val=self.val_keypoints,
y_val=self.val_num_labels,
batch_size=self.batch_size,
class_weight=class_weight)
Я действительно не знаю, что я могу сделать еще, чтобы достичь точности хотя бы 80 %, действительно ли максимальная точность составляет 70 %, данные неверны, модель слишком проста или, возможно, существует неправильная техника, которую я использую? А если эта штука с большей точностью в начале - это нормально? Я действительно хочу узнать, как я могу создавать такие модели, и знаю, что я как бы застрял в этом и больше не знаю, смогу ли я что-то с этим поделать. Может ли кто-нибудь взглянуть на эту проблему и дать мне совет? Большое спасибо за любые идеи, которые я могу попробовать или проверить

Подробнее здесь: https://stackoverflow.com/questions/792 ... g-training
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»