Я пытаюсь реализовать 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