python - tensorflow 占位符形状 [None] [None,1] 区别
问题描述
我是张量流的新手。我试验了一个 DQN 算法,其中的部分涉及
a = tf.placeholder(tf.int32, shape = [None],name='A')
q = tf.reduce_sum(critic_q * tf.one_hot(a,n_outputs),axis=1,keepdims=True,name='Q')#Q value for chosen action
y = tf.placeholder(tf.float32, shape = [None],name='Y')
learning_rate = 1e-4
cost = tf.reduce_mean(tf.square(y-q))#mean squared error
global_step = tf.Variable(0,trainable=False,name='global_step')
optimizer = tf.train.AdamOptimizer(learning_rate)
training_op = optimizer.minimize(cost,global_step=global_step)
并用 初始化输入 y y_batch=np.zeros(nbatch)
。网络几乎没有经过任何训练。
然后,我切换到将 y 定义为
y = tf.placeholder(tf.float32, shape = [None,1],name='Y')
并用 初始化输入y_batch=np.zeros(nbatch).reshape(-1,1)
,效果很好。
第一次实施中发生了什么?
解决方案
每个张量都有一个秩(维数)和一组维数。
具有形状[1]
的占位符是等级为 1 且位置为 0 的维度为 1 的占位符。
具有形状[None, 1]
的占位符是等级为 2 的占位符,因此它有 2 个维度。第一个维度(索引 0)具有未知大小(它将在运行时解析),而第二个维度(索引 1)具有已知大小 1。
为了兼容,张量必须具有相同的秩和维度。
您可以在此处阅读有关张量形状的更完整评估:https ://pgaleone.eu/tensorflow/2018/07/28/understanding-tensorflow-tensors-shape-static-dynamic/#tensors-the-basic
推荐阅读
- javascript - How to Create Chart.JS Bar Graph with Min, Max & Average
- android - 第三方应用程序是否可以从 ram 中删除未使用的进程?
- flutter - 如何在模拟器中测试颤振指纹代码?
- php - 如何将字段从文本更改为选项框?
- javascript - 如何在动态附加的内部元素上附加点击事件?
- docker - 泊坞窗图像未运行
- c# - 为什么我的 JWT 令牌没有传递给控制器的方法?
- revit-api - Revit:为什么我的墙边界框与它的 LocationCurve 不一致?
- ios - CoreStore 在更新数据模型时插入数组作为关系对象
- javascript - 多维数组的排序序列跨浏览器兼容并具有“自然情况”