相关疑难解决方法(0)

TypeError:无法pickle _thread.lock对象

尝试使用共享队列同时运行两个不同的函数并获得错误...如何使用共享队列同时运行两个函数?这是Windows 7上的Python 3.6版.

from multiprocessing import Process
from queue import Queue
import logging

def main():
    x = DataGenerator()
    try:
        x.run()
    except Exception as e:
        logging.exception("message")


class DataGenerator:

    def __init__(self):
        logging.basicConfig(filename='testing.log', level=logging.INFO)

    def run(self):
        logging.info("Running Generator")
        queue = Queue()
        Process(target=self.package, args=(queue,)).start()
        logging.info("Process started to generate data")
        Process(target=self.send, args=(queue,)).start()
        logging.info("Process started to send data.")

    def package(self, queue): 
        while True:
            for i in range(16):
                datagram = bytearray()
                datagram.append(i)
                queue.put(datagram)

    def send(self, queue):
        byte_array = bytearray()
        while True:
            size_of__queue = queue.qsize()
            logging.info(" queue size …
Run Code Online (Sandbox Code Playgroud)

python-3.x

25
推荐指数
3
解决办法
6万
查看次数

在分配具有形状的张量时理解ResourceExhaustedError:OOM

我正在尝试使用tensorflow实现跳过思维模型,并在此处放置当前版本. 在此输入图像描述

目前我使用我的机器的一个GPU(总共2个GPU)和GPU信息

2017-09-06 11:29:32.657299: I tensorflow/core/common_runtime/gpu/gpu_device.cc:940] Found device 0 with properties:
name: GeForce GTX 1080 Ti
major: 6 minor: 1 memoryClockRate (GHz) 1.683
pciBusID 0000:02:00.0
Total memory: 10.91GiB
Free memory: 10.75GiB
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试向模型提供数据时,我得到了OOM.我尝试调试如下:

我运行后立即使用以下代码段 sess.run(tf.global_variables_initializer())

    logger.info('Total: {} params'.format(
        np.sum([
            np.prod(v.get_shape().as_list())
            for v in tf.trainable_variables()
        ])))
Run Code Online (Sandbox Code Playgroud)

得到了2017-09-06 11:29:51,333 INFO main main.py:127 - Total: 62968629 params,大概是关于240Mb如果全部使用tf.float32.输出tf.global_variables

[<tf.Variable 'embedding/embedding_matrix:0' shape=(155229, 200) dtype=float32_ref>,
 <tf.Variable 'encoder/rnn/gru_cell/gates/kernel:0' shape=(400, 400) dtype=float32_ref>,
 <tf.Variable 'encoder/rnn/gru_cell/gates/bias:0' shape=(400,) dtype=float32_ref>,
 <tf.Variable 'encoder/rnn/gru_cell/candidate/kernel:0' shape=(400, …
Run Code Online (Sandbox Code Playgroud)

tensorflow tensorflow-gpu

18
推荐指数
4
解决办法
3万
查看次数

Keras"pickle_safe":在Python中"pickle safe"或"non picklable"是什么意思?

Keras fit_generator()有一个pickle_safe默认参数False.
如果 pickle_safe,训练可以更快地运行,并相应地将标志设置为True

根据Kera的文档:

pickle_safe:如果为True,则使用基于进程的线程.请注意,由于此实现依赖于多处理,因此不应将非可选参数传递给生成器,因为它们无法轻松传递给子进程.

我不明白这是什么意思.
我怎样才能确定我的论点是否pickle_safe存在

如果它是相关的:
- 我传入一个自定义生成器
- 生成器函数接受参数:X_train,y_train,batch_size,p_keep;
它们的类型为np.array,int,float)
- 我没有使用GPU
- 而且,我使用的是Keras 1.2.1,但我相信这个参数与keras 2的行为相同

process pickle thread-safety python-multithreading keras

7
推荐指数
1
解决办法
2961
查看次数

在使用Keras进行的深度学习中如何利用多处理和多线程的优势?

我假设像keras / tensorflow / ...这样的大多数框架会自动使用所有CPU内核,但实际上它们似乎并没有。我只是发现很少的资源可以导致我们在深度学习过程中使用CPU的全部容量。我找到了一篇有关

from multiprocessing import Pool 
import psutil
import ray 
Run Code Online (Sandbox Code Playgroud)

另一方面,基于在多个过程中使用keras模型的答案,没有上述库的踪迹。是否有更优雅的方式利用Keras 的多处理功能,因为它在实施中非常受欢迎。

  • 例如,如何通过简单的RNN实现进行修改,以在学习过程中实现至少50%的CPU容量?

  • 我应该使用第二模型作为多任务处理(如LSTM)吗?我的意思是我们可以使用更多的CPU来同时管理运行多个模型吗?

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from keras.layers.normalization import BatchNormalization
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import LSTM,SimpleRNN
from keras.models import Sequential
from keras.optimizers import Adam, RMSprop

df = pd.read_csv("D:\Train.csv", header=None) …
Run Code Online (Sandbox Code Playgroud)

python multithreading multiprocessing deep-learning keras

7
推荐指数
1
解决办法
783
查看次数