Problemas para agregar una capa adicional a la red neuronal en Tensorflow

Jakob

Estoy tratando de agregar una segunda capa oculta a mi red neuronal, entrenando en el conjunto de datos MNIST. Con solo una simple capa oculta, el entrenamiento funciona bien y la precisión aumenta constantemente.

Cuando trato de agregar la segunda capa, la precisión se bloquea en 0.117 cada vez que comienzo a entrenar. ¿No puedo entender qué estoy haciendo mal aquí?

Intenté agregar sigmoide a mi y sin suerte.

XTrain = XTrain[0:10000,:]
YTrain = YTrain[0:10000]

K = len(set(YTrain))
N = len(YTrain)
M = 12 #Hidden layer units
D = XTrain.shape[1]


tfX = tf.placeholder(tf.float32, [None, D])
tfY = tf.placeholder(tf.float32, [None, K])                    

# HIDDEN LAYER 1
W1 = tf.Variable(tf.random_normal([D,M], stddev=0.01))
b1 = tf.Variable(tf.random_normal([M], stddev=0.01))

# HIDDEN LAYER 2
W2 = tf.Variable(tf.random_normal([M,M], stddev=0.01))
b2 = tf.Variable(tf.random_normal([M], stddev=0.01))

# OUTPUT LAYER 
W3 = tf.Variable(tf.random_normal([M,K], stddev=0.01))
b3 = tf.Variable(tf.random_normal([K], stddev=0.01))

# MODEL
h1 = tf.nn.sigmoid(tf.matmul(tfX, W1) + b1)
h2 = tf.nn.sigmoid(tf.matmul(h1, W2) + b2)
y = tf.matmul(h2,W3) + b3

# Softmax and cross-entropy
cost = tf.reduce_mean(
  tf.nn.softmax_cross_entropy_with_logits_v2(
    labels = tfY,
    logits = y)
)

# Targets One-Hot encoded
T = np.zeros((N,K)) 
for i in range(N):
    T[i,YTrain[i]] = 1

#Gradient descent
train_op = tf.train.GradientDescentOptimizer(0.05).minimize(cost)

predict_op = tf.argmax(y, 1)

# Start session and initialize variables
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

# TRAIN
for i in range(10000):
    sess.run(train_op, feed_dict={tfX: XTrain, tfY: T})
    pred = sess.run(predict_op, feed_dict={tfX: XTrain, tfY: T})
    if i % 20 == 0:
        print("Accuracy:", np.mean(YTrain == pred)) 

Cuando empiezo a entrenar, la salida se ve así:

Exactitud: 0.0991 Exactitud: 0.1127 Exactitud: 0.1127 Exactitud: 0.1127 Exactitud: 0.1127 Exactitud: 0.1127 Exactitud: 0.1127 Exactitud: 0.1127 Exactitud: 0.1127 Exactitud: 0.1127 Exactitud: 0.1127 Exactitud: 0.1127

Jakob

Yo mismo encontré una solución al problema.

Aparentemente, la inicialización de los pesos no fue correcta. Funciona si cambio la inicialización a:

# HIDDEN LAYER 1
W1 = tf.Variable(tf.random_normal([D,M], stddev=1) / np.sqrt(D))
b1 = tf.Variable(tf.random_normal([M], stddev=1))

# HIDDEN LAYER 2
W2 = tf.Variable(tf.random_normal([M,M], stddev=1) / np.sqrt(M))
b2 = tf.Variable(tf.random_normal([M], stddev=1))

# OUTPUT LAYER 
W3 = tf.Variable(tf.random_normal([M,K], stddev=1) / np.sqrt(M))
b3 = tf.Variable(tf.random_normal([K], stddev=1))

Por qué todavía no estoy muy seguro, agradecería cualquier respuesta y comentario.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Problemas para agregar una capa adicional a la red neuronal en Tensorflow

Reforma la salida de la capa de la red neuronal para convertirla en una serie temporal

Pregunta sobre la cantidad de unidades en la capa de salida para una red neuronal de aproximación de funciones usando Tensorflow

Error al agregar capas en la red neuronal en tensorflow

¿Cómo diseñar la capa de incrustación en la red neuronal para tener una mejor calidad?

¿Agregar un valor adicional a una entrada de red neuronal convolucional?

Las predicciones en Tensorflow con una red neuronal de 1 capa oculta no cambian - regresión

qué es una 'capa' en una red neuronal

Problemas para comprender la red neuronal convolucional

¿Se puede usar relu en la última capa de una red neuronal?

¿Cómo eliminar toda la capa oculta en una red neuronal?

red neuronal: predice los dígitos MNIST solo con una neurona en la capa de salida

No se puede entrenar la red neuronal con una capa oculta

¿Por qué una capa de convolución 1x1 funciona para la reducción de características en una regresión de red neuronal?

Elegir el número de unidades en una capa de una red neuronal para la distribución de datos cónicos

Restaurar una red neuronal guardada en Tensorflow

¿Importa qué tipo de matriz es una matriz numpy para la entrada en una red neuronal tensorflow / keras?

Representar funciones en la red neuronal Tensorflow

¿Agregar una capa densa antes de la capa LSTM en keras o Tensorflow?

Red neuronal simple de una sola capa

¿Cómo le dices a la capa de una red neuronal que busque / en rasgos específicos como ojos y bordes?

No se puede aproximar la función de multiplicación simple en una red neuronal con 1 capa oculta

Problemas para comprender el algoritmo de retropropagación en la red neuronal

Ingrese un archivo CSV en TensorFlow para construir una red neuronal

Y puerta de red neuronal de una sola capa con tensorflow

¿Qué capa debo usar cuando construyo una red neuronal con Tensorflow 2.x?

¿Cómo agregar la clase "OTRO" en la red neuronal?

¿Cómo aplicar Drop Out en Tensorflow para mejorar la precisión de la red neuronal?

¿Cómo aplicar Drop Out en Tensorflow para mejorar la precisión de la red neuronal?

TOP Lista

CalienteEtiquetas

Archivo