Моя нейронная сеть не учится (отрицательный R_Squared, всегда одни и те же потери, категориальные входные данные, регрессия) - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь заставить свою нейронную сеть работать, но, к сожалению, похоже, что я что-то упустил.

У меня есть входные данные из разных категорий. Например, тип машины. («abc», «bcd», «dca»).

Итак, одна строка моего ввода содержит разные слова из разных категорий слов. На данный момент у меня ~ 70.000 образцов с 12 функциями.

Сначала я использую sklearns labelEncoder для преобразования каждого слова в число. Размер словарного запаса увеличивается до 17903.

Моя простая новая работа выглядит так:

#Start with the NN

model = tf.keras.Sequential([
    tf.keras.layers.Embedding(np.amax(ml_input)+1, 300, input_length = x_train.shape[1]),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(500, activation=tf.keras.activations.softmax),
    tf.keras.layers.Dense(1, activation = tf.keras.activations.linear)
])

model.compile(optimizer=tf.keras.optimizers.Adam(lr=0.01), 
              loss=tf.keras.losses.mean_absolute_error,
              metrics=[R_squared])
model.summary()



#Train the Model
callback = [tf.keras.callbacks.EarlyStopping(monitor='loss', min_delta=5.0, patience=15),
           tf.keras.callbacks.ReduceLROnPlateau(monitor='loss', factor=0.1, patience=5, min_delta=5.00, min_lr=0)
           ]
history = model.fit(x_train, y_train, epochs=50,  batch_size=64, verbose =2, callbacks = callback)

Потеря первой эпохи составляет около 120, а после двух эпох 70, но теперь она больше не меняется. Так что после двух эпох моя сеть больше не учится.

Я уже пробовал другие функции потери, стандартизировал свои метки (они идут от 3 до 500 минут), больше нейронов, другой плотный слой, другую функцию активации. Но после двух эпох потеря всегда равна 70. Мой R_Squared - что-то вроде -0.02, он меняется, но всегда остается отрицательным около 0.

Кажется, моя сеть совсем не учится.

Кто-нибудь имеет представление о том, что я делаю неправильно?

Спасибо за вашу помощь!

...