Я пытаюсь заставить свою нейронную сеть работать, но, к сожалению, похоже, что я что-то упустил.
У меня есть входные данные из разных категорий.
Например, тип машины. («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.
Кажется, моя сеть совсем не учится.
Кто-нибудь имеет представление о том, что я делаю неправильно?
Спасибо за вашу помощь!