python – Predicciones usando una red neuronal recurrente Keras – la precisión es siempre 1.0

TLDR: ¿Cómo uso un RNN de Keras para predecir el siguiente valor en una secuencia?

Tengo una lista de valores secuenciales. Quiero introducirlos en un RNN para predecir el siguiente valor en la secuencia.

[ 0.43589744  0.44230769  0.49358974 ...,  0.71153846  0.70833333 0.69230769]

Estoy usando Keras para hacer esto y puedo obtener una red con una pérdida decreciente, pero la precisión es consistentemente 1.0. Esto está mal. y_tests! = model.predict (x_tests).

Epoch 0
1517/1517 [==============================] - 0s - loss: 0.0726 - acc: 1.0000 - val_loss: 0.0636 - val_acc: 1.0000
Epoch 1
1517/1517 [==============================] - 0s - loss: 0.0720 - acc: 1.0000 - val_loss: 0.0629 - val_acc: 1.0000
...

Aquí está mi red.

model = Sequential()
model.add(SimpleRNN(1, 100))
model.add(Dense(100, 1, activation = "sigmoid"))
model.compile(loss="mean_squared_error", optimizer = "sgd")

He probado un SimpleRNN, GRU y LSTM pero no he tenido suerte. Aquí es cómo se formatean los datos.

# Current value
y_train = [[ 0.60576923] [ 0.64102564] [ 0.66025641] ..., [ 0.71153846] [ 0.70833333] [ 0.69230769]]

# Previous 10 values
x_train_10 = [
    [[ 0.65064103] [ 0.66346154] [ 0.66346154] ..., [ 0.72115385] [ 0.72435897] [ 0.71153846]] ...,
    [[ 0.66346154] [ 0.66346154] [ 0.67628205] ..., [ 0.72435897] [ 0.71153846] [ 0.70833333]]
]

# Previous value
x_train_1 = [[ 0.58333333] [ 0.60576923] [ 0.64102564] ...,  [ 0.72435897] [ 0.71153846] [ 0.70833333]]

# So here are the shapes...
y_train.shape    = (1895, 1)
x_train_10.shape = (1895, 10, 1)
x_train_1.shape  = (1895, 1)

Cada elemento en x_train_10 es una lista de los 10 valores anteriores. Lo formateé así para seguir la documentación de Keras de que las capas recurrentes toman entradas de forma (nb_samples, timesteps, input_dim).

También he intentado usar una capa de incrustación sin suerte. (Esta puede ser la forma incorrecta de usarlo, solo lo he visto en la clasificación, no en la predicción).

model = Sequential()
model.add(Embedding(1, 30))
model.add(LSTM(30, 100))
...

pad_sequences tampoco funcionó.

x_train_1 = sequence.pad_sequences(x_train_1, maxlen = None, dtype = "float32")

Quiero que la RNN funcione con esta sencilla arquitectura / datos para poder usarla en el futuro para problemas más complejos.

Gracias 🙂

Mejor respuesta
Publiqué una página similar question on the Keras Github y obtuve una buena respuesta.

lukedeo dijo que acc: 1.0000 significa que tanto la salida verdadera como la salida predicha son mayores que 0.5 o viceversa. En su lugar, debería mirar la pérdida, o mse, para determinar la precisión del modelo. Esto se debe a que mi red es una regresión, no un clasificador / agrupador.

El error cuadrático medio es una buena medida de la precisión. precision_percent = 1 – np.sqrt (mse)

fchollet (el creador de Keras) explicó que “la precisión no es relevante para un problema de regresión”.

Al hacer un problema de clasificación, la precisión puede hacerse relevante al configurar class_mode en ‘categórico’ o ‘binario’ en model.comple (…) dependiendo del destino (salida de red).

Por favor indique la dirección original:python – Predicciones usando una red neuronal recurrente Keras – la precisión es siempre 1.0 - Código de registro