Получение сообщения «Только массивы размера 1 могут быть преобразованы в скаляры Python»

#python #tensorflow #jupyter-notebook

#python #tensorflow #jupyter-ноутбук

Вопрос:

Я получаю сообщение об ошибке «массивы только размера 1 могут быть преобразованы в скаляры Python». Я предполагаю, что в последней части кода это либо dl, либо gl. Я вижу, что некоторые люди, которые сталкиваются с этой ошибкой, из-за путаницы с переменными numpy и python. Я пытаюсь вернуться назад, чтобы выяснить, что необходимо изменить, чтобы исправить эту ошибку, но я в тупике. Я указал, где находится эта ошибка с помощью >>> . Кто-нибудь может дать какие-либо рекомендации по поводу этой ошибки? Спасибо!

 gen_inp=tf.placeholder(tf.float32,shape=[None,noise_dim])
disc_inp=tf.placeholder(tf.float32,shape=[None,img_dim])

batch_size=128
num_steps=80000
learning_rate=2e-4
display_step=20

def weight_init(shape):
    return tf.random_normal(shape=shape,stddev=1. / tf.sqrt(shape[0] / 2.))

W={"w1" : tf.Variable(weight_init([noise_dim,gen_dim])),
  "w2": tf.Variable(weight_init([gen_dim,img_dim])),
  "w3": tf.Variable(weight_init([img_dim,disc_dim])),
  "w4": tf.Variable(weight_init([disc_dim,1]))}
b={"b1":tf.Variable(tf.zeros([gen_dim])),
  "b2":tf.Variable(tf.zeros([img_dim])),
  "b3":tf.Variable(tf.zeros([disc_dim])),
  "b4":tf.Variable(tf.zeros([1]))}

def gen_fun(x):
    h1=tf.matmul(x,W["w1"])
    h1=tf.add(h1,b["b1"])
    h1=tf.nn.relu(h1)

    h1=tf.matmul(h1,W["w2"])
    h1=tf.add(h1,b["b2"])
    h1=tf.nn.sigmoid(h1)

    return h1
def disc_fun(x):
    h2=tf.matmul(x,W["w3"])
    h2=tf.add(h2,b["b3"])
    h2=tf.nn.relu(h2)

    h2=tf.matmul(h2,W["w4"])
    h2=tf.add(h2,b["b4"])
    h2=tf.nn.sigmoid(h2)

gen_out=gen_fun(gen_inp)
disc_real_out=disc_fun(disc_inp)
disc_fake_out=disc_fun(gen_out)
optin_gen=tf.train.AdamOptimizer(learning_rate=learning_rate)
optin_disc=tf.train.AdamOptimizer(learning_rate=learning_rate)

>>> cost_gen=-tf.reduce_mean(tf.log(disc_fake_out))

cost_disc=-tf.reduce_mean(tf.log(disc_real_out)) tf.log(1. -disc_fake_out)
vars_gen = [W['w1'],W['w2'],b['b1'],b['b2']]
vars_disc= [W['w3'],W['w4'],b['b3'],b['b4']]
training_gen=optim_gen.minimize(cost_gen,var_list=vars_gen)
training_disc=optim_gen.minimize(cost_disc,var_list=vars_disc)


init = tf.global_variables_initializer()
with tf.Session() as sess:

    sess.run(init)

    for step in range(1, num_steps 1):
        batch_x, _ = df.train.next_batch(batch_size)

        noise_temp = np.random.uniform(-1., 1., size=[batch_size, noise_dim])

        feed_dict = {disc_inp: batch_x, gen_inp: noise_temp}
        _, _, gl, dl = sess.run([training_gen, training_disc, cost_gen, cost_disc],
                               feed_dict=feed_dict)
        if step % 2000 == 0 or step == 1:
       >>>     print('Step %i: Generator Loss: %f, Discriminator Loss: %f' % (step, gl, dl))
            print("finished!")

    n = 6
    canvas = np.empty((28 * n, 28 * n))

    for i in range(n):
        z= np.random.uniform(-1., 1., size=[n, noise_dim])

        g= sess.run(gen_out, feed_dict={gen_inp: z})

        g= -1 * (g - 1)
        for j in range (n):
            canvas[i * 28:(i   1) * 28, j * 28:(j  1) * 28] = g[j].reshape([28, 28])

    plot.figure(figsize=(n, n))
    plt.imshow(canvas, origin="upper", cmap="gray")
    plot.show()
  

Комментарии:

1. Вы не возвращаете узел h2 tensorflow в функции disc_fun.

2. @wedran2 я исправил эту ошибку перед публикацией, но забыл внести изменение здесь … Я все еще получаю ошибку

3. Также, когда я извлекаю значения dl и gl из print (), я могу полностью запустить код