尝试使用共享队列同时运行两个不同的函数并获得错误...如何使用共享队列同时运行两个函数?这是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) 我正在尝试使用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) 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的行为相同
我假设像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)