Python:memmap对象列表在joblib并行中变为“无”类型

时间:2018-07-30 12:48:48

标签: python-3.x tensorflow nonetype joblib numpy-memmap

我正在执行以下操作:

  1. 我有一个tensorflow DNN层的列表。 B ViewController
  2. 上面的每个列表都附加到np.memmap对象的列表中。 npm audit fix
  3. 我可以访问内存映射列表并检索张量。但是,当尝试访问npm audit fix --force内部的张量时,它将返回'None'类型的对象。但是,内存映射列表的长度在nn.append(tf.layers.dense(...))内部是正确的。

我在下面附上了示例代码。

nnList[i] = nn

上面的代码给出了这个输出。请注意数组的长度以及张量如何变成joblib.parallel

joblib.parallel

如何访问 import os import tempfile import numpy as np import tensorflow as tf from joblib import Parallel, delayed, load, dump tmpFolder = tempfile.mkdtemp() __nnFile = os.path.join(tmpFolder, 'nn.mmap') nnList = np.memmap(__nnFile, dtype=object, mode='w+', shape=(5)) def main(): for i in range(5): nn = [] input = tf.placeholder(dtype=tf.float32, shape=(1, 8)) nn.append(tf.layers.dense(inputs=input, units=8, activation=tf.sigmoid, trainable=False)) nn.append(tf.layers.dense(inputs=nn[0], units=2, activation=tf.sigmoid, trainable=False)) nnList[i] = nn print('nnList: ' + str(len(nnList))) for i in range(5): nn = nnList[i] print(nn) print(nn[-1]) print('--------------------------- ' + str(i)) with Parallel(n_jobs = -1) as parallel: parallel(delayed(func1)(i) for i in range(5)) def func1(i): print('nnList: ' + str(len(nnList))) for x in range(5): nn = nnList[x] print(nn) print('--------------------------- ' + str(x)) if __name__ == '__main__': main() 内部的张量?请帮忙。

1 个答案:

答案 0 :(得分:0)

当时发现了问题。希望它对以后的人有所帮助。

None问题与张量无关。我使用错误的joblib.Parallel函数。

应该将变量传递给delayed以便派生进程可以访问(我怎么在文档中忽略了它!)。正确的方法:

with Parallel(n_jobs = -1) as parallel:
    parallel(delayed(func1)(i, WHATEVER_VARIABLE_I_WANT) for i in range(5))