Значение потерь нейронной сети не меняется - PullRequest
0 голосов
/ 20 марта 2020

Я новичок в глубоком обучении, поэтому я создал эту модель, чтобы тренировать свои Данные, я пробовал много комбинаций, добавляя слои, меняя функцию активации, меняя функцию потерь, но потери не уменьшаются. Ищу вашей помощи, ребята.

my training_data содержит 1000 образцов: 1000 r aws и 20 столбцов всех чисел, выходные данные: список из 4 чисел вот моя модель:

from keras import models
from keras.models import Sequential


from keras import layers
from keras.layers import Dense
from keras.layers import Flatten , Dropout
from keras.optimizers import SGD
from keras.callbacks import EarlyStopping
from sklearn.preprocessing import StandardScaler
from keras import optimizers

scaler = StandardScaler()
input_shape = x_train[0].shape
x_train_std = scaler.fit_transform(x_train)


model = Sequential()
model.add(layers.Dense(32, activation='sigmoid' , input_shape=input_shape))
model.add(Dropout(0.1))
model.add(layers.Dense(20, activation='sigmoid' ))
model.add(Dropout(0.1))
model.add(layers.Dense(15, activation='sigmoid' ))
model.add(Dropout(0.1))

model.add(layers.Dense(4, activation='softmax'))
#sgd = optimizers.SGD(lr=0.00001, decay=1e-6, momentum=0.85, nesterov=True)
#opt = SGD(lr=0.1, nesterov=True)
sgd = optimizers.SGD(lr=0.01, momentum=0.87, nesterov=True)
model.compile(loss='mean_squared_error',
              optimizer=sgd)
es = EarlyStopping(monitor='val_loss', patience=10)
history = model.fit(x_train_std, y_train , validation_split=0.1, epochs=100, batch_size=1 , callbacks = [es])#,

1 Ответ

0 голосов
/ 20 марта 2020

Поскольку вы находитесь в настройке регрессии, вы должны не использовать softmax в качестве функции активации вашего последнего слоя - linear активация (которая является стандартной по умолчанию, если не определена) должна быть используется здесь.

Сигмовидные активации также крайне нежелательны для промежуточных слоев - вместо этого используйте relu.

Кроме того, по умолчанию не следует использовать выпадение - начинайте без него и добавляйте только если это улучшит вашу производительность проверки.

В целом, вот как ваша модель должна выглядеть для начинающих:

model = Sequential()
model.add(layers.Dense(32, activation='relu' , input_shape=input_shape))
# model.add(Dropout(0.1))
model.add(layers.Dense(20, activation='relu' ))
# model.add(Dropout(0.1))
model.add(layers.Dense(15, activation='relu' ))
# model.add(Dropout(0.1))
model.add(layers.Dense(4)) # default activation='linear'

, где вы можете раскомментировать выпадающие слои только при необходимости (и не обязательно в целом).

Попытка оптимизатора Адама также является хорошей идеей для первого подхода:

model.compile(loss='mean_squared_error',
              optimizer=keras.optimizers.Adam())

Наконец, вам определенно следует увеличить batch_size (попробуйте 64 или 128 для стартеры).

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