es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Keras: ¿Cómo definir la forma de entrada para la primera capa DENSE?

Soy nuevo en el aprendizaje profundo y keras.

Consulte el siguiente código.

1) Quiero confirmar la terminología. Antes de procesar para crear lotes mediante el Generador de series temporales, hay 10 muestras. Después de procesar por el Generador, ¿es correcto decir que hay 8 muestras en 1 lote?

2) No entiendo por qué yhat difiere cuando defino la forma de entrada de la primera capa como ‘input_shape’ vs ‘input_dim’. yhat debería ser solo (1,1) – un valor único.

3) Si en cambio, uso una capa de RNN simple como mi primera capa, ¿cuál debería ser la forma de entrada?

Gracias

univariable un paso problema con mlp

desde numpy importar matriz
desde keras.models importar secuencial
desde keras.layers importar densa
desde keras.preprocessing.sequence importar TimeseriesGenerator

definir conjunto de datos

series = matriz([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) # 10 muestras antes del procesamiento por el Generador

definir generador

timestep = 2
generador = TimeseriesGenerator(series, series, length=timestep, batch_size=8)

número de lotes

imprimir('Lotes: %d' % len(generador))

OUT --> Lotes: 1

imprimir cada lote

para i en rango(len(generador)):
   x, y = generador[i]
   imprimir('%s => %s' % (x, y))

OUT:

[[1 2]
 [2 3]
 [3 4]
 [4 5]
 [5 6]
 [6 7]
 [7 8]
 [8 9]] => [ 3  4  5  6  7  8  9 10]

Después del procesamiento por el Generador, hay 8 muestras en 1 lote.

x, y = generador[0]
imprimir(x.shape)

definir modelo

modelo = secuencial()

TensorFlow asume que la primera dimensión es el tamaño del lote que puede tener cualquier tamaño, por lo que no es necesario definirlo. La segunda D es el número de pasos de tiempo. La tercera D es el número de características

1ª CAPA con forma de entrada definida por input_shape

modelo.add(densa(100, activation='relu', input_shape=(timestep,1)))

1ª CAPA con forma de entrada definida por input_dim

modelo.add(densa(100, activation='relu', input_dim=timestep))

modelo.add(densa(1))
modelo.compilar(optimizer='adam', loss='mse')

ajustar modelo

modelo.fit_generator(generador, steps_per_epoch=1, epochs=200, verbose=0)

hacer una predicción de un paso fuera de la muestra

x_input = matriz([9, 10]).reshape((1, timestep))
imprimir(x_input.shape)

yhat = modelo.predict(x_input, verbose=0)
imprimir(yhat)

OUT: [[9.3066435, 10.239568]] si la forma de la primera capa es input_shape

OUT: [[11.545249]] si la forma de la primera capa es input_dim

Tags:  ,

Answer

  1. Avatar for davy.ai

    Respuestas

    1. Sí, después de ser procesado por TimeSeriesGenerator, hay 8 muestras en 1 lote. La longitud de cada lote es 2 y el tamaño del lote es 8, por lo que hay un total de 8 secuencias en cada lote.

    2. La diferencia en yhat probablemente se debe a la diferencia en la forma de los datos de entrada que el modelo está recibiendo. Cuando se utiliza input_shape, el modelo espera datos de entrada con forma (tamaño_lote, paso_tiempo, características), mientras que cuando se utiliza input_dim, el modelo espera datos de entrada con forma (tamaño_lote, características). Esta diferencia puede hacer que el modelo se comporte de manera diferente y produzca una salida diferente.

    3. Si se utilizara una capa RNN simple como primera capa, la forma de entrada seguiría siendo (paso_tiempo, características) como en el caso de usar input_shape para la capa Dense. La capa RNN simple también espera datos de entrada con forma (tamaño_lote, paso_tiempo, características).

Comments are closed.