Регрессия Keras LSTM дала мне только два вида значения: {0,1} - PullRequest
0 голосов
/ 08 октября 2018

Я работаю над моделью прогнозирования с LSTM.Мой входной массив имеет 136 двоичных элементов.

inputArray_day1 = [0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

Выход - значение с плавающей запятой.(Фактический диапазон выходных меток равен [0,9], но я нормализовал его с помощью Z ~ N (0,1), например,

kp_mean = np.mean(y_train)
kp_std = np.std(y_train)
y_train = (y_train - kp_mean)/kp_std

У меня есть 1900 тренировочных наборов и верхняя граница числаскрытые нейроны, которые не приведут к избыточной аппроксимации от здесь , я определил число скрытых нейронов как 2.

 N_hidden = N_samples/(alpha * (N_input+N_output)) = 1900/(5*(136+1)) = 2.8

Моя модель,

opt = tf.keras.optimizers.Adam(lr=0.00005)
model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(2,batch_input_shape=(1,1,136),stateful=True))
model.add(tf.keras.layers.Dense(1))
model.compile(loss='mse', optimizer=opt)
model.fit((x_train,y_train,epochs=1,batch_size=1,verbose=1,callbacks=[custom_hist], validation_data = (Xv,Yv))

Сначала, когда скорость обучения была равна 1, выходные данные модели отображают только одно значение: 0 или 1. После того, как я изменил его на 0,00005, выходные данные показывают смесь {0,1}, как показано ниже (игнорируйте графикtitle)

enter image description here

Я понятия не имею, почему эта модель показывает только {0,1} и не имеет другого значения с плавающей запятой. Пожалуйста, помогите мне. Любые комментарииприветствуются!

...