我目前正在尝试用张量流编码CNN来玩扑克。 游戏的状态是输入9x17x17张量,输出应该是介于0和1之间的10个值,然后最高应该确定为我的移动。 为了训练这个网络,我用状态准备了样本,但是我没有那种我到目前为止使用的标签,例如在MNIST数据集中。相反,我基本上得到了一个列表,每个输出包含1个条目,包含规范化的赢/输情景。 0-0.5表示丢失,其中0表示所有筹码丢失,0.5-1表示赢1,意味着所有筹码都被赢了。 为了测试我的网络是否正常工作,我针对一个全能机器人创建了游戏状态。 我的网络输出可能是这样的: [0.322,0.5535,0.003,0.773,0.123,0.444,0.122,0.888,0.921,0.232] 每个条目代表一个相应的移动。 实际的游戏结果(与全能玩家相比)是这样的: [0.475 1 1 1 1 1 1 1 1 1]
我对成本函数的想法是简单地使用预测移动中的最大值(或者更确切地说是最大值的索引)并使用我想要最大化的相应结果。 我尝试通过以下方式实现此目的:
move = tf.argmax(output_layer, axis=0)
costl = y_true[0, :]
cost = - tf.gather(y_true, move)
tf.train.AdamOptimizer(learning_rate=1e-4).minimize(cost)
不幸的是,这不起作用,我收到以下错误: ValueError:没有为任何变量提供渐变
如何实现类似的成本函数?