ValueError: Попытка поделиться переменной Discriminator / density / kernel, но указала форму (512, 21) и нашла форму (21632, 21) - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь реализовать GAN в своем собственном наборе данных, который содержит изображения размером 200 * 200. Я использую код, который первоначально использовался для набора данных MNIST. Я импортировал свой собственный набор данных в это, но я получаю эту ошибку.

ValueError: Попытка поделиться переменной Discriminator / dens / kernel, но указала форму (512, 21) и нашла форму (21632, 21)

Поскольку я очень плохо знаком с машинным обучением, я был бы очень признателен, если кто-то может помочь решить проблему.

Кусок кода, который отображает ошибку:

x_height, x_width = [200,200]
def normalize(x):
# normalize data
    x = (x) / 230
    return x.reshape((-1, x_height, x_width, 3))

def D(x, dropout_rate, is_training, reuse = True, print_summary = True):
# discriminator (x -> n + 1 class)

with tf.variable_scope('Discriminator', reuse = reuse) as scope:
    # layer1 - do not use Batch Normalization on the first layer of Discriminator
    conv1 = tf.layers.conv2d(x, 32, [5, 5],
                             strides = [2, 2],
                             padding = 'same')
    lrelu1 = tf.maximum(0.2 * conv1, conv1) #leaky relu
    dropout1 = tf.layers.dropout(lrelu1, dropout_rate)

    # layer2
    conv2 = tf.layers.conv2d(dropout1,64, [3, 3],
                             strides = [2, 2],
                             padding = 'same')
    batch_norm2 = tf.layers.batch_normalization(conv2, training = is_training)
    lrelu2 = tf.maximum(0.2 * batch_norm2, batch_norm2)

    # layer3
    conv3 = tf.layers.conv2d(lrelu2,128, [2, 2],
                             strides = [2, 2],
                             padding = 'same')
    batch_norm3 = tf.layers.batch_normalization(conv3, training = is_training)
    lrelu3 = tf.maximum(0.2 * batch_norm3, batch_norm3)
    dropout3 = tf.layers.dropout(lrelu3, dropout_rate)

    # layer 4
    conv4 = tf.layers.conv2d(dropout3, 128 , [2, 2],
                             strides = [2, 2],
                             padding = 'same')
    # do not use batch_normalization on this layer - next layer, "flatten5",
    # will be used for "Feature Matching"
    lrelu4 = tf.maximum(0.2 * conv4, conv4)

    # layer 5
    flatten_length = lrelu4.get_shape().as_list()[1] * \
                     lrelu4.get_shape().as_list()[2] * lrelu4.get_shape().as_list()[3]
    flatten5 = tf.reshape(lrelu4, (-1, flatten_length)) # used for "Feature Matching" 
    fc5 = tf.layers.dense(flatten5, (num_classes + 1))
    output = tf.nn.softmax(fc5)

    assert output.get_shape()[1:] == [num_classes + 1]

    if print_summary:
        print('Discriminator summary:\n x: %s\n' \
              ' D1: %s\n D2: %s\n D3: %s\n D4: %s\n' %(x.get_shape(), 
                                                       dropout1.get_shape(),
                                                       lrelu2.get_shape(), 
                                                       dropout3.get_shape(),
                                                       lrelu4.get_shape()))
    return flatten5, fc5, output
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...