我有TensorFlow的内存泄漏.我提到Tensorflow:即使在关闭Session时内存泄漏?为了解决我的问题,我按照答案的建议,似乎解决了这个问题.但它在这里不起作用.
为了重新创建内存泄漏,我创建了一个简单的例子.首先,我使用这个函数(我在这里:如何在Python中获取当前的CPU和RAM使用?)来检查python进程的内存使用情况:
def memory():
import os
import psutil
pid = os.getpid()
py = psutil.Process(pid)
memoryUse = py.memory_info()[0]/2.**30 # memory use in GB...I think
print('memory use:', memoryUse)
Run Code Online (Sandbox Code Playgroud)
然后,每次调用该build_model函数时,内存的使用都会增加.
这是build_model具有内存泄漏的函数:
def build_model():
'''Model'''
tf.reset_default_graph()
with tf.Graph().as_default(), tf.Session() as sess:
tf.contrib.keras.backend.set_session(sess)
labels = tf.placeholder(tf.float32, shape=(None, 1))
input = tf.placeholder(tf.float32, shape=(None, 1))
x = tf.contrib.keras.layers.Dense(30, activation='relu', name='dense1')(input)
x1 = tf.contrib.keras.layers.Dropout(0.5)(x)
x2 = tf.contrib.keras.layers.Dense(30, activation='relu', name='dense2')(x1)
y = tf.contrib.keras.layers.Dense(1, activation='sigmoid', name='dense3')(x2)
loss = tf.reduce_mean(tf.contrib.keras.losses.binary_crossentropy(labels, y))
train_step = …Run Code Online (Sandbox Code Playgroud) 我需要同时训练多个Keras模型.我正在使用TensorFlow后端.问题是,当我尝试同时训练两个模型时,我得到了Attempting to use uninitialized value.
错误并不是真正相关,主要问题似乎是Keras强迫在同一个会话中使用相同的图创建两个模型,因此它会发生冲突.
我是TensorFlow的新手,但我的直觉是答案很简单:你必须为每个Keras模型创建一个不同的会话,并在他们自己的会话中训练它们.有人可以解释一下它将如何完成?
我真的希望有可能在使用Keras时解决这个问题,而不是在纯TensorFlow中编写所有内容.任何解决方法也将受到赞赏.
我正在尝试在使用http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html时拟合预先计算的内核矩阵,这显然是可能的,因为存在“预计算”指标。我允许你传递一个 n_samples*n_samples 核矩阵来拟合方法。
使用它时,这是我得到的:
ValueError:指标“预计算”对算法“自动”无效
我不明白如何使用算法“自动”来查找最近的邻居与我使用预先计算的内核矩阵的事实不兼容。
编辑 :
不幸的是,我的问题没有得到任何关注。我已经更深入地研究了源代码,似乎有一个错误,因为当你通过时metric=precomputed,因为代码应该允许你选择algorithm=auto. 相反,在运行时,代码会遇到我提到的 valueError,我认为作者不希望他的代码表现得那样。我不知道如何更改源代码以使其正常运行。
另外我想补充一个问题,从更理论的角度来看,能够使用核矩阵(又名克矩阵)来使用 kNN 的拟合方法是完全合理的。您可以从 gram 矩阵中推导出距离矩阵,然后当您想要预测新数据时,您只需找到 k 个最近的邻居,并使用 k 个最近邻居中最新的标签标记新数据。
我真的认为这个问题应该得到答案。这是正确的问题,我想要一些非常精确的东西,我知道对 Python 和 scikit learn 库有更深入了解的人应该能够回答它。也许我遗漏了一些明显的东西,但我也认为它应该可以帮助任何尝试将 kNN 与预先计算的内核矩阵(这不是孤立的情况)一起使用的人。
我正在尝试冻结 Tensorflow 工作流程中的 Keras 层。这就是我定义图表的方式:
import tensorflow as tf
from keras.layers import Dropout, Dense, Embedding, Flatten
from keras import backend as K
from keras.objectives import binary_crossentropy
import tensorflow as tf
sess = tf.Session()
from keras import backend as K
K.set_session(sess)
labels = tf.placeholder(tf.float32, shape=(None, 1))
user_id_input = tf.placeholder(tf.float32, shape=(None, 1))
item_id_input = tf.placeholder(tf.float32, shape=(None, 1))
max_user_id = all_ratings['user_id'].max()
max_item_id = all_ratings['item_id'].max()
embedding_size = 30
user_embedding = Embedding(output_dim=embedding_size, input_dim=max_user_id+1,
input_length=1, name='user_embedding', trainable=all_trainable)(user_id_input)
item_embedding = Embedding(output_dim=embedding_size, input_dim=max_item_id+1,
input_length=1, name='item_embedding', trainable=all_trainable)(item_id_input)
user_vecs = …Run Code Online (Sandbox Code Playgroud)