我试图运行一个AdamOptimizer进行一步训练,不成功.
optimizer = tf.train.AdamOptimizer(learning_rate)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
sess.run(optimizer.minimize(cost), feed_dict={X:X_data, Y: Y_data})
Run Code Online (Sandbox Code Playgroud)
控制台吐出一个难看的错误:
FailedPreconditionError (see above for traceback): Attempting to use uninitialized value beta1_power
[[Node: beta1_power/read = Identity[T=DT_FLOAT, _class=["loc:@W1"], _device="/job:localhost/replica:0/task:0/cpu:0"](beta1_power)]]
Run Code Online (Sandbox Code Playgroud)
在代码中,cost是一个明确定义的函数,使用两个参数X,Y(分别为NN和训练标签的条目)实现conv NN加上后勤丢失函数
关于什么可能出错的任何想法?
在我的课上,我学习了Prolog回溯算法和Rete forprop算法,但我也被告知Rete可以用来做backprop.
这是如何运作的?它与Prolog回溯的方式类似/不同?
例如,这是我给出的练习之一:
(R1) 24fingers and antennas => origin(mars)
(R2) shy and 5feet => origin(mars)
(R3) shy and 4arms => origin(venus)
(R4) looksDownWhenTalking => shy
(R5) fleesWhenSeen => shy
Run Code Online (Sandbox Code Playgroud)
目标是通过以下事实找到外星人的起源:
(F1) fleesWhenSeen
(F2) 4arms
Run Code Online (Sandbox Code Playgroud)
在Prolog中,我们将通过模式匹配origin(X)规则的RHS 的目标来解决它.规则与R1,R2和R3匹配,因此首先会触发R1,我们会尝试解决24fingers and antennas失败的子目标.
然后我们将回溯到开头并触发R2,最终将失败,最后回溯并触发R3,这成功.
因此X,venus在成功查询中结束绑定,算法结束.
现在,我们如何使用rete backprop算法解决相同的练习?
我天真地假设我们将使用一个子目标列表,从origin(X)开始,触发RHS与子目标匹配的规则.
但是,当一些子目标失败时,我不清楚Rete算法如何处理回溯,或者一旦它解决了某个目标子集,它将如何知道它已经成功.
我试图运行一个AdamOptimizer进行一步训练,不成功.
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
_, cost_value = sess.run(optimizer, feed_dict={X:X_data, Y: Y_data})
Run Code Online (Sandbox Code Playgroud)
在代码中,cost是一个明确定义的函数,使用两个参数X,Y(分别为NN和训练标签的条目)实现conv NN加上后勤丢失函数
当我运行它时,控制台告诉我运行返回None作为输出,这让我感到困惑,因为我预计它会给我返回成本.
我究竟做错了什么?
所以假设我们想[0, 1, -1, 2, -2, ...在Haskell中生成列表.
实现这一目标最优雅的方式是什么?
我想出了这个解决方案:
solution = [0] ++ foldr (\(a,b) c->a:b:c) [] zip [1..] $ map negate [1..]
Run Code Online (Sandbox Code Playgroud)
但我相信必须有更好的方法.
我刚刚从 TF 1.13 升级到 TF 2.0,我的口译员抱怨,因为tf.set_random_seed它不再存在。
TF 2.0 中的等效功能是什么?
考虑表达式E1 = foldl op acc l和E2 = foldr op acc l.
什么是一些自然的充分条件op,acc和/或l保证等价E1和E2?
一个简单的例子是,如果op是常数则两者都是等价的.
我非常肯定必须有精确的条件涉及交换性和/或相关性op,和/或有限性l和/或中立性acc.
我想创建一个由嵌入层组成的 Keras 模型,然后是两个具有 dropout 0.5 的 LSTM,最后是一个具有 softmax 激活的密集层。
第一个 LSTM 应该将顺序输出传播到第二层,而在第二层中,我只对在处理整个序列后获取 LSTM 的隐藏状态感兴趣。
我尝试了以下方法:
sentence_indices = Input(input_shape, dtype = 'int32')
embedding_layer = pretrained_embedding_layer(word_to_vec_map, word_to_index)
embeddings = embedding_layer(sentence_indices)
# Propagate the embeddings through an LSTM layer with 128-dimensional hidden state
X = LSTM(128, return_sequences=True, dropout = 0.5)(embeddings)
# Propagate X trough another LSTM layer with 128-dimensional hidden state
X = LSTM(128, return_sequences=False, return_state=True, dropout = 0.5)(X)
# Propagate X through a Dense layer with softmax activation to get back a …Run Code Online (Sandbox Code Playgroud) 我有一个 32 个 numpy 数组的列表,每个数组都有 shape (n, 108, 108, 2),n每个数组的形状不同。我想将它们全部堆叠起来创建一个 shape 的 numpy 数组(32, m, 108, 108, 2),其中m是 s 中的最大值n,较短的数组用零填充。
我该怎么做呢?
我昨天问了类似的问题,但是当像我的例子一样使用深度数组时,那里的答案似乎被破坏了。
具体来说,我最终采用了这个解决方案,它产生了最干净的代码:
data = np.column_stack(zip_longest(*data, fillvalue=0))
Run Code Online (Sandbox Code Playgroud)
但现在它抛出这个错误:
ValueError: setting an array element with a sequence.
Run Code Online (Sandbox Code Playgroud) 我正在训练 Keras 模型,保存它们,model.save()然后加载它们并恢复训练。
我想在每次训练后绘制整个训练历史记录,但model.fit_generator()只返回最后一次训练的历史记录。
我可以保存初始会话的历史记录并自己更新,但我想知道 Keras 中是否有管理训练历史记录的标准方法。
history1 = model.fit_generator(my_gen)
plot_history(history1)
model.save('my_model.h5')
# Some days afterwards...
model = load_model('my_model.h5')
history2 = model.fit_generator(my_gen)
# here I would like to reconstruct the full_training history
# including the info from history1 and history2
full_history = ???
Run Code Online (Sandbox Code Playgroud) 考虑以下Prolog程序:
transform([], []).
transform([X | Xs],[Y | Ys]):-
isSpecial(X),
isSpecial(Y),
transformSpecial(X,Y),
transform(Xs,Ys).
transform([X | Xs],[ X | Ys]):-
transform(Xs,Ys).
isSpecial(foo).
isSpecial(bar).
isSpecial(foobar).
transformSpecial(X,Y):-
isSpecial(X),
isSpecial(Y),
not(X = Y).
Run Code Online (Sandbox Code Playgroud)
有些情况下我会打电话tranform([foo, 1, 2], X)和我想打电话的情况transform(X, [foo, 1, 2]).
在这两种情况下,我都希望X与之[bar, 1, 2]结合[foobar, 1, 2],但不与之结合[foo, 1, 2].也就是说,我希望一旦谓词正确识别出第二个子句适用,它就应该只使用第二个子句来回溯.
我应该在哪里插入切口以实现此行为?
python ×5
tensorflow ×4
haskell ×2
keras ×2
prolog ×2
arrays ×1
backtracking ×1
fold ×1
infinite ×1
list ×1
lstm ×1
numpy ×1
prolog-cut ×1
rete ×1
rule-engine ×1