python - TFLearn 回归损失函数未初始化
问题描述
我正在尝试复制Kaggle 内核中列出的tflearn 自动编码器。调用如下所示:
class AutoEncoder():
def __init__(self, layers):
"""layers should be a list of layer sizes"""
self.layers = layers
self.encoder = None
self.decoder = None
self.decoding_model = None
self.encoding_model = None
def fit(self, X):
# build encoder
self.encoder = [tflearn.input_data(shape=[None, X.shape[1]])]
for layer in self.layers:
self.encoder.append(tflearn.fully_connected(self.encoder[-1], layer))
# build decoder
self.decoder = [self.encoder[-1]]
for layer in reversed(self.layers[:-1]):
self.decoder.append(tflearn.fully_connected(self.decoder[-1], layer))
self.decoder.append(tflearn.fully_connected(self.decoder[-1], X.shape[1], activation='sigmoid'))
# regression
net = tflearn.regression(self.decoder[-1],
optimizer='adam',
learning_rate=0.001,
# loss='mean_square',
loss='weighted_crossentropy',
metric=None)
self.decoding_model = tflearn.DNN(net)
#encoding
self.encoding_model = tflearn.DNN(self.encoder[-1], session=self.decoding_model.session)
self.decoding_model.fit(X, X, n_epoch=20, batch_size=256)
return self.decoding_model
def predict(self, X):
return self.encoding_model.predict(X)
ae = AutoEncoder([1024, 256, 2])
ae.fit(X_train)
但是,在运行时,它会失败并显示一个错误,表明我的损失函数尚未初始化:
---------------------------------------------------------------------------
FailedPreconditionError Traceback (most recent call last)
/opt/conda/lib/python3.6/site-packages/tensorflow/python/client/session.py in _do_call(self, fn, *args)
1291 try:
-> 1292 return fn(*args)
1293 except errors.OpError as e:
/opt/conda/lib/python3.6/site-packages/tensorflow/python/client/session.py in _run_fn(feed_dict, fetch_list, target_list, options, run_metadata)
1276 return self._call_tf_sessionrun(
-> 1277 options, feed_dict, fetch_list, target_list, run_metadata)
1278
/opt/conda/lib/python3.6/site-packages/tensorflow/python/client/session.py in _call_tf_sessionrun(self, options, feed_dict, fetch_list, target_list, run_metadata)
1366 self._session, options, feed_dict, fetch_list, target_list,
-> 1367 run_metadata)
1368
FailedPreconditionError: Attempting to use uninitialized value WeightedCrossentropy/Mean/moving_avg_1
[[{{node WeightedCrossentropy/Mean/moving_avg_1/read}} = Identity[T=DT_FLOAT, _class=["loc:@Adam_1/moving_avg/AssignMovingAvg"], _device="/job:localhost/replica:0/task:0/device:CPU:0"](WeightedCrossentropy/Mean/moving_avg_1)]]
使用 TFLearn,我不太确定全局变量初始化的正确位置在哪里,或者这是否能解决问题。有人可以告知为什么会发生这种情况吗?
解决方案
您可以尝试这样来修复此特定错误。移到fit
上一行之前。
self.decoding_model = tflearn.DNN(net)
self.decoding_model.fit(X, X, n_epoch=20, batch_size=256)
#encoding
self.encoding_model = tflearn.DNN(self.encoder[-1], session=self.decoding_model.session)
推荐阅读
- html - 点击更改html语言
- nestjs - 设置 @ApiQuery 可选,只有 1 个参数来选择 Nestjs
- ansible - ansible 命令行主机模式过滤器按库存变量
- ios - 如何在 UITableViewCell 中向 UIViews 添加重力?
- javascript - 如何在纯 JavaScript 中获取不包括滚动条的视口大小?
- python - Onnxruntime 错误 9:LeakyRelu 未实现
- node.js - 我如何检查模板并获取它的值?
- python - 如何从线程实例方法访问实例变量?
- python-3.x - Python遍历CSV的每一行以从列表中查找部分字符串匹配
- javascript - 如何在javascript中查找和获取元素的 ::after 或 ::before?