Python Tensorflow:提要的形状错误{u dict}

Python Tensorflow:提要的形状错误{u dict},python,tensorflow,reshape,placeholder,Python,Tensorflow,Reshape,Placeholder,第一次遇到这样的问题 错误是关于feed\u dict={tfkids:kids,tfkids\u fit:kids\u fit},似乎需要重塑kids\u fit 有人能帮我解决这个问题吗 import tensorflow as tf from tensorflow.contrib.distributions import Normal import numpy as np import matplotlib.pyplot as plt DNA_SIZE = 1 POP_SIZE = 10

第一次遇到这样的问题

错误是关于
feed\u dict={tfkids:kids,tfkids\u fit:kids\u fit}
,似乎需要重塑
kids\u fit

有人能帮我解决这个问题吗

import tensorflow as tf
from tensorflow.contrib.distributions import Normal
import numpy as np
import matplotlib.pyplot as plt

DNA_SIZE = 1
POP_SIZE = 10
LR = 0.1
N_GENERATION = 50

def F(x):
    return x**2

def get_fitness(value):
    return -value

mean = tf.Variable(tf.constant(13.), dtype=tf.float32)
sigma = tf.Variable(tf.constant(5.), dtype=tf.float32)
N_dist = Normal(loc=mean, scale=sigma)
make_kids = N_dist.sample([POP_SIZE])

tfkids = tf.placeholder(tf.float32, [POP_SIZE, DNA_SIZE])
tfkids_fit = tf.placeholder(tf.float32, [POP_SIZE])
loss = -tf.reduce_mean(N_dist.log_prob(tfkids) * tfkids_fit)
train_op = tf.train.GradientDescentOptimizer(LR).minimize(loss)

x = np.linspace(-20, 20, 100)
plt.plot(x, F(x))

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

plt.ion()
for g in range(N_GENERATION):
    kids = sess.run(make_kids)
    kids_fit = get_fitness(F(kids))
    sess.run(train_op, feed_dict={tfkids: kids, tfkids_fit: kids_fit})

    if "plot_points" in globals():
        plot_points.remove()

    plot_points = plt.scatter(kids, F(kids), s=30)
    plt.pause(0.05)

plt.ioff()
plt.show()
这会在尝试测试代码时出错

ValueError:无法为具有形状“(10,1)”的张量“占位符:0”提供形状(10,)的值


你可以重塑孩子们的张量

kids = sess.run(make_kids)
kids = tf.reshape(kids,(None,1))
kids_fit = get_fitness(F(kids))
sess.run(train_op, feed_dict={tfkids: kids, tfkids_fit: kids_fit})

您的
占位符:0
tfkids=tf.Placeholder(tf.float32,[POP\u SIZE,DNA\u SIZE])

如您所见,
tfkids
形状是
[POP\u SIZE,DNA\u SIZE]
=
(10,1)

相反,您的
子变量具有shape=
(10)

虽然两个形状都包含10个值,但第一个形状有2个维度,而第二个形状是1个维度

因此,您必须扩展
kids
变量的维度,以便通过以下方式与
tfkids
兼容:

sess.run(train_op, feed_dict={tfkids: np.expand_dims(kids, axis=1), tfkids_fit: kids_fit})

np.expand\u dims
允许您为
kids
shape

问题添加1D维度:当您声明
tfkids
变量时,您将其形状指定为
[POP\u SIZE,DNA\u SIZE]
,即(10,1)。但是,当您在训练期间将真实数据输入占位符时,您传递的是(10,)形数据

解决方案: 因此,您必须将训练数据重塑为(10,1),以便将其提供给变量。有几种方法可以重塑数据。您可以使用numpy库的重塑功能。在输入培训数据之前,请执行以下操作

kids = np.reshape(kids, [-1, 1])

希望这有帮助

太好了!这是解决此问题的另一种方法,谢谢@Niyamat Ullah