Pregunta

Actualmente codeo un GaN para generar números MNIST, pero el generador no quiere funcionar. Primero elijo Z con forma 100 por lote, pongo en una capa para entrar en la forma (7,7, 256). Luego conv2d_transpose la capa a 28, 28, 1. (que es básicamente una foto mnist)

Tengo dos preguntas 1.) Este código no funciona para obvio. ¿Tienes alguna pista, por qué? 2.) Soy muy consciente de cómo funciona la convolución de la transposición, pero no puedo encontrar ningún recurso para calcular el tamaño de salida dada la entrada, los pasos y el tamaño del núcleo específico para TensorFlow. La información útil que encontré es https://arxiv.org/pdf/1603.07285v1.pdf Pero, por ejemplo, el relleno en TensorFlow funciona muy diferente. ¿Me puedes ayudar?

mb_size = 32 #Size of image batch to apply at each iteration.
X_dim = 784
z_dim = 100
h_dim = 7*7*256
dropoutRate = 0.7
alplr = 0.2 #leaky Relu


def generator(z, G_W1, G_b1, keepProb, first_shape):

    G_W1 = tf.Variable(xavier_init([z_dim, h_dim]))
    G_b1 = tf.Variable(tf.zeros(shape=[h_dim]))    


    G_h1 = lrelu(tf.matmul(z, G_W1) + G_b1, alplr)
    G_h1Drop = tf.nn.dropout(G_h1, keepProb)  # drop out

    X = tf.reshape(G_h1Drop, shape=first_shape)
    out = create_new_trans_conv_layer(X, 256, INPUT_CHANNEL, [3, 3], [2,2], "transconv1", [-1, 28, 28, 1])    
    return out




# new transposed cnn
def create_new_trans_conv_layer(input_data, num_input_channels, num_output_channels, filter_shape, stripe, name, output_shape):
    # setup the filter input shape for tf.nn.conv_2d
    conv_filt_shape = [filter_shape[0], filter_shape[1], num_output_channels, num_input_channels]


    # initialise weights and bias for the filter
    weights = tf.Variable(tf.truncated_normal(conv_filt_shape, stddev=0.03),
                          name=name + '_W')
    bias = tf.Variable(tf.truncated_normal([num_input_channels]), name=name + '_b')

    # setup the convolutional layer operation
    conv1 = tf.nn.conv2d_transpose(input_data, weights, output_shape, [1, stripe[0], stripe[1], 1], padding='SAME')

    # add the bias
    conv1 += bias

    # apply a ReLU non-linear activation

    conv1 = lrelu(conv1, alplr)

    return conv1


...


    _, G_loss_curr = sess.run(
        [G_solver, G_loss],
        feed_dict={z: sample_z(mb_size, z_dim), keepProb: 1.0} #training generator

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
scroll top