Top.Mail.Ru
Ответы

Нейросеть переобучается, высокий loss как решить?

Делаю нейросеть, ради интереса и изучения но получаю высокий loss и переобучение как можно решить эту проблему?

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
 import numpy as np 
import tensorflow as tf 
from tensorflow.keras.preprocessing.text import Tokenizer 
from tensorflow.keras.preprocessing.sequence import pad_sequences 
 
# Пример текстовых данных для обучения 
sentences = [ 
    'Это пример предложения 1.', 
    'Это другое предложение.', 
    'А это третье предложение.', 
    'Это просто пример.', 
    "Сегодняшний день был насыщен событиями. Утром я проснулся рано, выпил кофе и отправился на работу. Весь день я занимался проектом, который требовал моего внимания. Вечером я встретился с друзьями в кафе, где мы поужинали и пообщались. В целом, день прошел успешно и был полон интересных моментов.", 
    "Вчера я посетил выставку современного искусства. Впечатления были потрясающие! Я увидел работы талантливых художников и скульпторов, которые вдохновили меня на новые творческие идеи. После выставки я сходил в кафе и заказал чашку горячего шоколада. Это был замечательный день!", 
    "Вчера я отправился в поход в горы с друзьями. Мы провели целый день на свежем воздухе, исследуя живописные места и наслаждаясь красотой природы. Вечером мы разжигали костер и пели песни под звездным небом. Это было незабываемо и вдохновляюще!", 
    "Сегодня у меня был насыщенный день. Утром я сходил в спортзал, потом встретился с друзьями на обед, после чего посетил несколько музеев. Вечером провел время с семьей, готовили ужин вместе и смотрели фильм.", 
    "Это был удивительный выходной! Я поехал на пикник с семьей и друзьями. Мы готовили шашлык, играли в футбол и наслаждались природой вокруг. Вечером мы зажгли костер и пели песни под гитару.", 
    "На прошлой неделе я побывал на кулинарном мастер-классе. Узнал много интересного о кулинарии и даже научился готовить новое блюдо. После мастер-класса мы с друзьями сходили в ресторан, чтобы попробовать местную кухню." 
    ] 
 
labels = np.array([9, 0, 9, 0, 9, 0, 9, 9, 9, 0])  # Пример меток классов 
 # Пример меток классов 
 
# Создание токенизатора и преобразование текста в последовательности чисел 
tokenizer = Tokenizer() 
tokenizer.fit_on_texts(sentences) 
word_index = tokenizer.word_index 
sequences = tokenizer.texts_to_sequences(sentences) 
 
# Дополнение последовательностей до одинаковой длины 
max_len = max([len(seq) for seq in sequences]) 
padded_sequences = pad_sequences(sequences, maxlen=max_len, padding='post') 
 
# Создание нейронной сети 
model = tf.keras.Sequential([ 
    tf.keras.layers.Embedding(len(word_index) + 60, 128, input_length=max_len), 
    tf.keras.layers.GlobalAveragePooling1D(), 
    tf.keras.layers.Dense(128, activation='relu'), 
    tf.keras.layers.Dense(60, activation='softmax'), 
    tf.keras.layers.Dense(1, activation='sigmoid') 
]) 
 
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) 
 
# Обучение модели 
model.fit(padded_sequences, labels, epochs=100) 
 
# Пример использования обученной модели для предсказания класса нового текста 
new_sentence = ['Новое предложение для классификации.'] 
new_sequence = tokenizer.texts_to_sequences(new_sentence) 
new_padded_sequence = pad_sequences(new_sequence, maxlen=max_len, padding='post') 
prediction = model.predict(new_padded_sequence) 
print("Prediction:", prediction) 
  
По дате
По рейтингу
Аватар пользователя
Просветленный

Чтобы избежать переобучения, попробуй следующее:

1. Уменьши количество эпох. 100 - это много!
2. Добавь слои Dropout, чтобы предотвратить переобучение.
3. Используй регуляризацию, если нужно.
4. Проверь данные на сбалансированность классов.
5. Раздели данные на тренировочную и валидационную выборки.
6. Примени Early Stopping.

Вот такой вариант! Keep it cool! 🦊✌️



Видео по теме