在做CNN基准测试时,我发现大部分时间都花在完全连接的层上。但是,在计算计算复杂度时,我发现:
O(conv) = N*(D * (W+P) * (H+P) * h *w)/S
O(fully_connected) = D*W*H*N
Run Code Online (Sandbox Code Playgroud)
哪里
D = Dimensions Input
W,w = Width Input, width Filter
H, h = Height Input, height Filter
S = Stride
P = Padding
N = number of outputs
Run Code Online (Sandbox Code Playgroud)
例如,我有一个1024x11x11 feature map input DxWxH,一个5x5 filter h,w不带padding p,带有Stride S of 1,和number of outputs N shall be 512
这导致对卷积进行以下计算:
O(转化)= 512 *(1024 * 11 * 11 * 5 * 5)/ …
complexity-theory convolution neural-network deep-learning caffe
我知道如何删除numpy数组中的每个第4个元素:
frame = np.delete(frame,np.arange(4,frame.size,4))
Run Code Online (Sandbox Code Playgroud)
现在,我想知道是否有一个简单的命令可以删除每n个(例如4个)乘以3个值。
一个基本的例子:
输入:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 ....]
会导致:
输出:[1,2,3,7,8,9,13,14,15,19,20,....]
我希望有一个简单的numpy / python功能,而不是编写必须在向量上进行迭代的函数(因为在我看来,这很长,...)。
谢谢您的帮助
使用web.whatsapp.de时,可以看到收到的图片的链接可能如下所示:
blob:https://web.whatsapp.com/3565e574-b363-4aca-85cd-2d84aa715c39
Run Code Online (Sandbox Code Playgroud)
如果将链接复制到地址窗口,它将打开图像,但是 - 如果省略"blob" - 它将只打开一个新的web whatsapp窗口.
我正在尝试下载此链接显示的图像.
但是使用常见的技术,例如使用request,urllib.request甚至BeautifulSoup总是在某一点上挣扎:url开头的"blob"会抛出错误.
这些答案使用Python从Blob URL下载文件 将显示错误
URLError: <urlopen error unknown url type: blob>
Run Code Online (Sandbox Code Playgroud)
或错误
InvalidSchema: No connection adapters were found for 'blob:https://web.whatsapp.com/f50eac63-6a7f-48a4-a2b8-8558a9ffe015'
Run Code Online (Sandbox Code Playgroud)
(使用BeatufilSoup)
使用原生方法,如:
import requests
url = 'https://web.whatsapp.com/f50eac63-6a7f-48a4-a2b8-8558a9ffe015'
fileName = 'test.png'
req = requests.get(url)
file = open(fileName, 'wb')
for chunk in req.iter_content(100000):
file.write(chunk)
file.close()
Run Code Online (Sandbox Code Playgroud)
只会导致与使用BeautifulSoup相同的错误.
我在Python中使用Selenium控制Chrome,但是我无法使用提供的链接正确下载图像.
我知道如何通过 Python 中的 id 获取变量的值,例如:
a = "hello world!"
ctypes.cast(id(a), ctypes.py_object).value
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以通过 id 覆盖变量值?
最简单的方法,这个:
ctypes.cast(id(a), ctypes.py_object).value = "new value"
Run Code Online (Sandbox Code Playgroud)
不起作用。
我正在使用线程库,并且希望有一个线程可以调用多个线程。该程序的背景是我有一个摄像头,可以捕获Image并使它们在TCP-SocketServer的类中可用。
因此,我需要一个运行相机捕获的线程和另一个运行TCPServer的线程,但是在此线程中,每个进入的连接都有多个线程。
最后一个线程意味着我需要一个可以自己创建线程的线程。不幸的是,这没有用。
我设法将巨大的代码分解成一个小片段,代表了问题所在:
import threading
def adder(x,res,i):
res[i] = res[i] + x*i;
def creator(a,threads,results):
results = []
for i in range(0,a):
results.append(0)
threads.append(threading.Thread(target=adder,args=(a,results,i)))
threads[i].start()
for i in range(0,len(threads)):
threads[i].join()
return results;
threads = [];
results = [];
mainThread = threading.Thread(target=creator,args=([5,threads,results]))
mainThread.start()
mainThread.join()
for i in range(0,len(results)):
print results[i]
print threads[i]
Run Code Online (Sandbox Code Playgroud)
在creator称为线程的函数中,应该使用funciton创建多个线程adder。
但是结果是空的,为什么会这样呢?
这是我的较大程序中发生的相同问题。
我找不到这个问题的直接答案,但是是否可以enum在 C 中强制使用某种数据类型?
例如,我有一个enum状态机,它只保存一些状态,因此对于内存和性能问题,将 an 定义enum为字节或更短的数据类型会很好。有没有办法在 C 语言甚至 Arduino IDE 中提供这种行为?
任何帮助表示赞赏
我有这样的功能:
def CreateURL(port=8082,ip_addr ='localhost',request='sth'):
return str("http://" + ip_addr+":"+str(port) + '/' + request)
Run Code Online (Sandbox Code Playgroud)
现在我想使用默认参数port,request但不是ip_addr.在这种情况下如何编写函数?
CreateURL('192.168.2.1')
Run Code Online (Sandbox Code Playgroud)
不起作用,因为它会覆盖port而不是ip_addr
我有一个用 Python 实现的非常简单的 HTTPServer。代码如下:
import SimpleHTTPServer
import SocketServer as socketserver
import os
import threading
class MyHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
path_to_image = 'RGBWebcam1.png'
img = open(path_to_image, 'rb')
statinfo = os.stat(path_to_image)
img_size = statinfo.st_size
print(img_size)
def do_HEAD(self):
self.send_response(200)
self.send_header("Content-type", "image/png")
self.send_header("Content-length", img_size)
self.end_headers()
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "image/png")
self.send_header("Content-length", img_size)
self.end_headers()
f = open(path_to_image, 'rb')
self.wfile.write(f.read())
f.close()
class MyServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
def __init__(self, server_adress, RequestHandlerClass):
self.allow_reuse_address = True
socketserver.TCPServer.__init__(self, server_adress, RequestHandlerClass, False)
if __name__ == "__main__":
HOST, PORT = "192.168.2.10", 9999
server = MyServer((HOST, PORT), MyHandler) …Run Code Online (Sandbox Code Playgroud) 我知道如果列表中的元素没有特定的大小,如何删除它:
x = [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2],[1,2,3],[1,2,3],[1,2,3,4]]
y = [s for s in x if len(s) == len(x[0])]
Run Code Online (Sandbox Code Playgroud)
x原始列表在哪里,y是新列表.正如你在第一个中看到的那样,有一个条目不像其他条目那么长,而一个条目比其他条目长.
我想删除一个元素,每次它与列表中的大多数元素的长度不同.只要列表中的第一个元素与大多数元素具有相同的长度,显示的方法就可以工作.
所以问题是如何获得最常见的元素长度?没有循环迭代的长度.平均值不起作用,因为平均值不代表大部分长度而是元素的平均长度(例如长度3,3,3,30将给出平均值~10,而长度的主要值为3).
假设我有一个2x2矩阵,其中填充了代表平面的值.现在我想在"z方向"中以三维方式围绕自身旋转平面.为了更好地理解,请参见下图:
我想知道这是否可以通过一个简单的仿射矩阵,因此我创建了以下简单的脚本:
%Create a random value matrix
A = rand*ones(200,200);
%Make a box in the image
A(50:200-50,50:200-50) = 1;
Run Code Online (Sandbox Code Playgroud)
现在我可以通过这样的旋转矩阵在二维房间中应用变换:
R = affine2d([1 0 0; .5 1 0; 0 0 1])
tform = affine3d(R);
transformed = imwarp(A,tform);
Run Code Online (Sandbox Code Playgroud)
但是,这不会产生上面所需的输出,我不太确定如何创建2-D仿射矩阵来创建这样的行为.
我猜三维仿射矩阵可以做到这一点.但是,如果我定义一个3-D仿射矩阵,我就不能再使用矩阵的二维表示,因为MATLAB会抛出错误:
The number of dimensions of the input image A must be 3 when the
specified geometric transformation is 3-D.
Run Code Online (Sandbox Code Playgroud)
那么如何用仿射矩阵编码所需的输出呢?
在图像上使用 base64 编码可以将图像完全恢复到其原始形状,包括其所有维度(2D、RGB),而无需直接知道分辨率——它们存储在 base64 信息中
但是,当我有一个表示图像的 numpy 数组时,例如:
test_image = np.random.rand(10,10,3)
Run Code Online (Sandbox Code Playgroud)
然后将其放入 base64 中:
b64_test_image = base64.b64encode(test_image)
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式返回数组的内容:
decoded = base64.b64decode(b64_test_image)
test_image_1D = np.frombuffer(decoded)
Run Code Online (Sandbox Code Playgroud)
然而,与test_image_1D具有维度 的原始图像相比,它只是一维的10x10x3。是否可以在不知道缓冲区大小的情况下恢复原始数组,就像图像一样?
我想执行一个python脚本,它可以处理多个IP地址.这些地址可以通过commad line给出.
我使用以下命令进行解析:
parser.add_argument('--IP',dest='Adresses',help='some Ips',
default=['192.168.2.15','192.168.2.3'],type=list,nargs='+')
Run Code Online (Sandbox Code Playgroud)
但是,当我通过如下命令运行脚本时:
python script.py --IP 192.168.2.15,192.168.2.3
Run Code Online (Sandbox Code Playgroud)
它在每个字符之后拆分字符串,如果我使用空格而不是逗号,则会发生相同的行为,因此如果我将其打印出来,则会发生以下输出
[['1','9','2','.','1','6','8','.','2','.','1','5'] ,['1','9','2','.','1','6','8','.','2','.','3']]
我希望拥有的是:
[ '192.168.2.15', '192.168.2.3']
如默认参数中所述
所以有两件事我不能在这里工作:
谢谢您的帮助
我知道如何删除或替换子字符串。但我只在子字符串不重复出现的情况下才想要它。我做了一个看起来非常难看的解决方法,我想知道是否有更好的解决方案。
假设以下字符串:
test = "Hello\n,I am here now.\n\nSo what's the problem?"
Run Code Online (Sandbox Code Playgroud)
第一个"\n"应该删除,但第二个"\n\n"不应该。
为此,我将 替换为"\n\n"永远不会出现在正常会话字符串中的内容,例如:
x = test.replace('\n\n','42#*#')
x = x.replace('\n','')
x = x.replace('42#*#','\n\n')
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我想知道是否有更好的解决方案来解决这个问题?
编辑:我尝试了在某个字符上拆分字符串的解决方案,前提是它没有直接跟在另一个特定字符之后
但是,当使用以下正则表达式时:
re.split('(?<!,)\n', test)
Run Code Online (Sandbox Code Playgroud)
我会得到以下结果:
['Hello', ',I am here now.', '', "So what's the problem?"]
Run Code Online (Sandbox Code Playgroud)
所以两者\n和\n\n都被删除了,我怎样才能避免这种情况?