我熟悉在python中创建线程的语法.
from threading import Thread
from queue import Queue
task_queue = Queue(maxsize=0)
num_threads=10
for i in range(num_threads):
thread = Thread(target=work, args=(task_queue,))
thread.start()
task_queue.join()
Run Code Online (Sandbox Code Playgroud)
我的问题是天气可以在其他线程中打开新线程,如下所示:
def work(task_queue):
task = task_queue.get()
subtasks = task.get_sub_tasks()
for subtask in subtasks:
thread = Thread(target=sub_work, args(subtask,))
thread.start()
Run Code Online (Sandbox Code Playgroud)
所以
这个结构好吗?或者这样做是不是很麻烦?
如果这没关系,子线程进程是否从属于生成它的线程,或者它们是否是父python进程的子进程?如果创建子线程的线程"死"并出现错误,那么子线程会发生什么?
我意识到python线程受解释器全局锁定,但我的应用程序涉及访问服务器,因此多线程是为了避免序列化连接需要太长时间.
有没有办法在numpy数组上进行重构,但是就地.我的问题是我的阵列非常大,所以任何不必要的副本都不会给内存带来压力.
我目前的做法是这样的:
train_x = train_x.reshape(n,32*32*3)
Run Code Online (Sandbox Code Playgroud)
这并没有完全解决问题,因为它创建了一个新数组,然后将标签train_x
赋予新数组.
在正常情况下这可以,因为垃圾收集器很快就会收集原始数组.
问题是我有这样的事情:
train_x, train_y = train_set
train_x = train_x.reshape(n,32*32*3)
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,即使train_x
不再指向原始数组,仍然有一个指向原始数组的指针train_set
.
我想要一种方法将前一个数组的所有指针更改为这个新数组.有办法吗?
或许还有其他一些方法来处理这个/
使用GradientDescentOptimizer而不是Adam Optimizer时,模型似乎不会收敛.另一方面,AdamOptimizer似乎工作正常.来自tensorflow的GradientDescentOptimizer出了什么问题?
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
def randomSample(size=100):
"""
y = 2 * x -3
"""
x = np.random.randint(500, size=size)
y = x * 2 - 3 - np.random.randint(-20, 20, size=size)
return x, y
def plotAll(_x, _y, w, b):
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(_x, _y)
x = np.random.randint(500, size=20)
y = w * x + b
ax.plot(x, y,'r')
plt.show()
def lr(_x, _y):
w = tf.Variable(2, dtype=tf.float32)
b = tf.Variable(3, dtype=tf.float32) …
Run Code Online (Sandbox Code Playgroud) python regression machine-learning gradient-descent tensorflow