Как установить активацию или оптимизатор для модели глубокого обучения, принимать только 1,0 для RNN

#python #tensorflow #keras

#python #тензорный поток #keras

Вопрос:

Например

У меня есть время для последовательных данных, подобных этому

[[1,0,0,0] [1,0,0,1],[1,0,1,0],[1,1,0,0]],,,,

и он предсказывает следующий из двух предыдущих.

Я хочу поместить [[1,0,0,0],[1,0,0,1]] и получить [1,0,1,0]

Итак, я создал модель, подобную приведенной ниже.

 input_len = 2
n_in = 4
n_hidden = 512
model = Sequential()

model.add(LSTM(n_hidden, input_shape=(input_len,n_in), return_sequences=True))
        
model.add(Dropout(0.1))
model.add(LSTM(n_hidden,  return_sequences=False))
        
model.add(Dense(n_hidden, activation="linear")) 
        
model.add(Dense(n_in, activation="linear"))
opt = Adam(lr=0.001)
model.compile(loss='mse', optimizer=opt)
model.summary()

#trainning and validate data 

X     #X.shape (800, 2, 4) [ [[1,0,0,1],[1,0,0,1]],[[1,0,0,1],[1,0,0,0]],,,
Y     #Y.shape (200, 2, 4)
val_x #val_x.shape (800,1,4) [[1,0,1,0]][1,1,1,0],,,,
val_y #val_y.shape (200,1,4)

history = model.fit(x, y, epochs=50,validation_data=(val_x, val_y))

#then predict
in_ = np.array[[1,0,0,1][1,1,1,1]]
out_ = model.predict(in_)
print(out_)
 

Я ожидаю, что в результате будет по крайней мере 1 или 0 .

однако я получаю такое число [[4.9627638e-01 1.4797167e-01 3.3314908e-01 1.3892795e-04]]

Я думаю, это имеет отношение к activation or optimizer

Я прав? или как мне поступить с данными 1 и 0?


изменить linear на relu

результат становится между [0.41842282 0.1275532 0. 0.4288069]

Однако по-прежнему это не 0 или 1….

Ответ №1:

Вывод модели не может быть дискретным, потому что он должен быть дифференцируемым. Попробуйте добавить что-то подобное:

 out_ = tf.cast(tf.math.greater(out_, 0.5), tf.int32)
 

Это неправильное предсказание, но точность зависит от ваших данных (например, если ваши данные случайны и нет шаблона — тогда вы получаете точность 6%). Попробуйте обучаться только на основе [[1,0,0,0] [1,0,0,1],[1,0,1,0]] , чтобы убедиться, что ваша модель работает.

Комментарии:

1. Я вижу. это простое и отличное решение