psychic online google dream deeply python machine-learning neural-network

python - online - Se requiere aclaración para la función make_step del guión de ensueño profundo de Google



google deep dream generator online (0)

Desde https://github.com/google/deepdream/blob/master/dream.ipynb

def objective_L2(dst): # Our training objective. Google has since release a way to load dst.diff[:] = dst.data # arbitrary objectives from other images. We''ll go into this later. def make_step(net, step_size=1.5, end=''inception_4c/output'', jitter=32, clip=True, objective=objective_L2): ''''''Basic gradient ascent step.'''''' src = net.blobs[''data''] # input image is stored in Net''s ''data'' blob dst = net.blobs[end] ox, oy = np.random.randint(-jitter, jitter+1, 2) src.data[0] = np.roll(np.roll(src.data[0], ox, -1), oy, -2) # apply jitter shift net.forward(end=end) objective(dst) # specify the optimization objective net.backward(start=end) g = src.diff[0] # apply normalized ascent step to the input image src.data[:] += step_size/np.abs(g).mean() * g src.data[0] = np.roll(np.roll(src.data[0], -ox, -1), -oy, -2) # unshift image if clip: bias = net.transformer.mean[''data''] src.data[:] = np.clip(src.data, -bias, 255-bias)

Si entiendo lo que está sucediendo correctamente, la imagen de entrada en net.blobs[''data''] se inserta en el NN hasta que end la capa. Una vez que el pase hacia adelante está completo hasta el end , calcula qué tan "apagado" el blob al end es de "algo".

Preguntas

  • ¿Qué es este "algo"? ¿Es dst.data ? Pasé por un depurador y descubrí que dst.data era solo una matriz de ceros justo después de la asignación y luego se llenaba de valores después del pase hacia atrás.

  • De todos modos, suponiendo que encuentra cuán "apagado" es el resultado del pase hacia adelante, ¿por qué intenta hacer una propagación hacia atrás? Pensé que el objetivo del sueño profundo no era entrenar más al modelo, sino "transformar" la imagen de entrada en lo que representa la capa del modelo original.

  • ¿Qué hace exactamente src.data[:] += step_size/np.abs(g).mean() * g do? Parece aplicar cualquier cálculo que se haya realizado anteriormente a la imagen original. ¿Es esta línea lo que realmente "transforma" la imagen?

Enlaces que ya he leído

  • https://stackoverflow.com/a/31028871/2750819

Me interesaría saber qué quería decir el autor de la respuesta aceptada

tomamos la burbuja de capa original y "realzamos" señales en ella. ¿Qué significa? No lo sé. Tal vez simplemente multipliquen los valores por coeficiente, tal vez algo más.

En esta publicación de blog, el autor comenta al lado de src.data[:] += step_size/np.abs(g).mean() * g : "acercarse a nuestros datos de destino". No estoy muy claro qué significa "datos objetivo" aquí.