【发布时间】:2018-12-28 22:02:59
【问题描述】:
我正在尝试学习一些旧教程,并发现将所有内容保留在 Keras 中会很刺激。不过,当我用 Tensorflow 编写一个极其简单的事情时,我遇到了麻烦。这是教程中的 tf 代理代码。
tf.reset_default_graph()
weights = tf.Variable(tf.ones([num_bandits]))
chosen_action = tf.argmax(weights,0)
reward_holder = tf.placeholder(shape=[1],dtype=tf.float32)
action_holder = tf.placeholder(shape=[1],dtype=tf.int32)
responsible_weight = tf.slice(weights,action_holder,[1])
loss = -(tf.log(responsible_weight)*reward_holder)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
update = optimizer.minimize(loss)
这是一个简单的多臂强盗。 到目前为止,我尝试将代理转换为 Keras 的工作是;
size = 4
weights = K.variable(K.ones(shape=(size), dtype='float32'))
best_action = Lambda(lambda x: K.cast(K.argmax(x), dtype=K.floatx()))(weights)
reward = Input(shape=(1,), dtype='float32')
action = Input(shape=(1,), dtype='int32')
responsible_weight = K.slice(weights, action[-1], [1])
custom_loss = -(K.log(responsible_weight) * reward)
opti = SGD(lr=0.001)
model = Model(inputs=[reward, action], outputs=best_action)
model.compile(optimizer=opti, loss=custom_loss)
挑战似乎是输入张量必须来自输入层(至少来自其他练习)。
任何人都可以在这里看到明显的错误吗?当我到达 model=Model() 行时,attributeError 告诉我
'NoneType' object has no attribute '_inbound_nodes'
我的“输出”已经包含在一个 Lambda 函数中,该函数部分地按照潜在重复的建议处理 Keras 张量部分。只是为了好玩,我添加了另一层并按照另一个线程的建议乘以一个,但这并没有改变错误。
【问题讨论】:
-
不是重复的。感谢您的建议。
标签: python-3.x tensorflow keras