- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在实验性地尝试创建一种具有以下标准的新型神经网络:
这些是我在 Julia 和 Python 中的实现尝试:
python
import random
import itertools
import time
import signal
from threading import Thread
from multiprocessing import Pool
import multiprocessing
POTENTIAL_RANGE = 110000 # Resting potential: -70 mV Membrane potential range: +40 mV to -70 mV --- Difference: 110 mV = 110000 microVolt --- https://en.wikipedia.org/wiki/Membrane_potential
ACTION_POTENTIAL = 15000 # Resting potential: -70 mV Action potential: -55 mV --- Difference: 15mV = 15000 microVolt --- https://faculty.washington.edu/chudler/ap.html
AVERAGE_SYNAPSES_PER_NEURON = 8200 # The average number of synapses per neuron: 8,200 --- http://www.ncbi.nlm.nih.gov/pubmed/2778101
# https://en.wikipedia.org/wiki/Neuron
class Neuron():
neurons = []
def __init__(self):
self.connections = {}
self.potential = 0.0
self.error = 0.0
#self.create_connections()
#self.create_axon_terminals()
Neuron.neurons.append(self)
self.thread = Thread(target = self.activate)
#self.thread.start()
#self.process = multiprocessing.Process(target=self.activate)
def fully_connect(self):
for neuron in Neuron.neurons[len(self.connections):]:
if id(neuron) != id(self):
self.connections[id(neuron)] = round(random.uniform(0.1, 1.0), 2)
def partially_connect(self):
if len(self.connections) == 0:
neuron_count = len(Neuron.neurons)
for neuron in Neuron.neurons[len(self.connections):]:
if id(neuron) != id(self):
if random.randint(1,neuron_count/100) == 1:
self.connections[id(neuron)] = round(random.uniform(0.1, 1.0), 2)
print "Neuron ID: " + str(id(self))
print " Potential: " + str(self.potential)
print " Error: " + str(self.error)
print " Connections: " + str(len(self.connections))
def activate(self):
while True:
'''
for dendritic_spine in self.connections:
if dendritic_spine.axon_terminal is not None:
dendritic_spine.potential = dendritic_spine.axon_terminal.potential
print dendritic_spine.potential
self.neuron_potential += dendritic_spine.potential * dendritic_spine.excitement
terminal_potential = self.neuron_potential / len(self.axon_terminals)
for axon_terminal in self.axon_terminals:
axon_terminal.potential = terminal_potential
'''
#if len(self.connections) == 0:
# self.partially_connect()
#else:
self.partially_connect()
pass
'''
if abs(len(Neuron.neurons) - len(self.connections) + 1) > 0:
self.create_connections()
if abs(len(Neuron.neurons) - len(self.axon_terminals) + 1) > 0:
self.create_axon_terminals()
'''
class Supercluster():
def __init__(self,size):
for i in range(size):
Neuron()
print str(size) + " neurons created."
self.n = 0
self.build_connections()
#pool = Pool(4, self.init_worker)
#pool.apply_async(self.build_connections(), arguments)
#map(lambda x: x.partially_connect(),Neuron.neurons)
#map(lambda x: x.create_connections(),Neuron.neurons)
#map(lambda x: x.create_axon_terminals(),Neuron.neurons)
def build_connections(self):
for neuron in Neuron.neurons:
self.n += 1
#neuron.thread.start()
neuron.partially_connect()
print "Counter: " + str(self.n)
Supercluster(10000)
Julia
global neurons = []
type Neuron
connections::Dict{UInt64,Float16}
potential::Float16
error::Float16
function Neuron(arg1,arg2,arg3)
self = new(arg1,arg2,arg3)
push!(neurons, self)
end
end
function fully_connect(self)
for neuron in neurons
if object_id(neuron) != object_id(self)
self.connections[object_id(neuron)] = rand(1:100)/100
#push!(self.connections, rand(1:100)/100)
end
end
end
function partially_connect(self)
if isempty(self.connections)
neuron_count = length(neurons)
for neuron in neurons
if object_id(neuron) != object_id(self)
if rand(1:neuron_count/100) == 1
self.connections[object_id(neuron)] = rand(1:100)/100
#push!(self.connections, rand(1:100)/100)
end
end
end
println("Neuron ID: ",object_id(self))
println(" Potential: ",self.potential)
println(" Error: ",self.error)
println(" Connections: ",length(self.connections))
end
end
function Build()
for i = 1:10000
Neuron(Dict(),0.0,0.0)
end
println(length(neurons), " neurons created.")
n = 0
@parallel for neuron in neurons
n += 1
partially_connect(neuron)
println("Counter: ",n)
end
end
Build()
首先,这些部分在每个神经元之间部分随机地建立连接,花费太多时间。 我怎样才能加快这个过程/部分?
python
def build_connections(self):
for neuron in Neuron.neurons:
self.n += 1
#neuron.thread.start()
neuron.partially_connect()
print "Counter: " + str(self.n)
Julia
n = 0
@parallel for neuron in neurons
n += 1
partially_connect(neuron)
println("Counter: ",n)
其次,当我的目标是创建至少一百万个神经元时,为每个神经元提供自己的线程是否是个好主意 ?这意味着它将像一个万线程。
我在这里试图做的是严格意义上模仿生物神经网络,而不是使用矩阵计算。
添加:
partially_connect
函数的新版本根据答案:
def partially_connect(self):
if len(self.connections) == 0:
neuron_count = len(Neuron.neurons)
#for neuron in Neuron.neurons:
elected = random.sample(Neuron.neurons,100)
for neuron in elected:
if id(neuron) != id(self):
#if random.randint(1,neuron_count/100) == 1:
self.connections[id(neuron)] = round(random.uniform(0.1, 1.0), 2)
print "Neuron ID: " + str(id(self))
print " Potential: " + str(self.potential)
print " Error: " + str(self.error)
print " Connections: " + str(len(self.connections))
性能显着提高。
最佳答案
在 Julia 中,如果性能很重要:不要使用全局变量(请参阅您的 neurons
数组)并且不要使用无类型数组(同样,请参阅您的 neurons
数组) .查看performance tips .您还应该分析以确定您的瓶颈在哪里。我强烈建议您在没有 @parallel
的情况下尝试它,直到您可以快速获得它。
我自己看了看,除了这些我还发现了一些令人吃惊的瓶颈:
rand(1:neuron_count/100)
创建浮点范围,而不是整数范围。这是一个巨大的瓶颈,分析立即识别出来。使用 rand(1:neuron_count÷100)
。object_id
,只需使用 !(neuron === self)
。或者甚至更好,将神经元
作为数组和要修改的条目的整数索引传递。修复这些项目后,我设法将程序的执行时间从大约 140 秒到 4 秒。几乎所有的运行时间都只是花在生成随机数上;您可以通过一次生成一个大型池而不是一个一个地生成它们来加速这一过程。
这使用 ProgressMeter 包(您必须安装)来显示进度。
using ProgressMeter
type Neuron
connections::Dict{UInt64,Float16}
potential::Float16
error::Float16
end
function fully_connect(self, neurons)
for neuron in neurons
if object_id(neuron) != object_id(self)
self.connections[object_id(neuron)] = rand(1:100)/100
#push!(self.connections, rand(1:100)/100)
end
end
end
function partially_connect(self, neurons)
if isempty(self.connections)
neuron_count = length(neurons)
for neuron in neurons
if !(neuron === self)
if rand(1:neuron_count÷100) == 1
self.connections[object_id(neuron)] = rand(1:100)/100
#push!(self.connections, rand(1:100)/100)
end
end
end
# println("Neuron ID: ",object_id(self))
# println(" Potential: ",self.potential)
# println(" Error: ",self.error)
# println(" Connections: ",length(self.connections))
end
end
function Build()
neurons = [Neuron(Dict(),0.0,0.0) for i = 1:10000]
println(length(neurons), " neurons created.")
@showprogress 1 "Connecting neurons..." for neuron in neurons
partially_connect(neuron, neurons)
end
neurons
end
neurons = Build()
关于python - 创建大量对象(神经元)并使用字典随机连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36703124/
我只想国家和资本化的值(value)。 这是我的完整代码: cities = { 'rotterdam': { 'country': 'netherlands',
想更好地了解如何比较对象类型的键。 dicOverall.exists(dic2) 返回 False,而 dicOverall.exists(dic1) 返回 True。我不太确定 .Exists 如
我是编程和 python 的新手,我不知道如何解决这个问题。 my_dict = {'tiger': ['claws', 'sharp teeth', 'four legs', 'stripes'
这个问题已经有答案了: Accessing an object property with a dynamically-computed name (19 个回答) 已关闭 8 年前。 我引用了这篇文
希望有人能帮忙。我正在使用 Python,我希望能够执行以下操作。 我有一组对象(例如形状)和一系列作用于这些对象的命令。命令的格式为命令字符串,后跟可变数量的参数,可以是字符串或整数 例如形状“矩形
我在文件中保存了一本字典。我从 python 交互式 shell 将字典加载到内存中,我的系统监视器显示 python 进程消耗了 4GB。以下命令提供以下输出: size1 = sys.getsiz
如果我运行以下代码: import json foo = [ { "name": "Bob", "occupation": "", "stand
我尝试获取列名及其索引,并将结果保存为数据框或字典: df <- data.frame(a=rnorm(10), b=rnorm(10), c=rnorm(10)) 我该怎么做?谢谢。 column
我正在尝试获取输入,如果字典 logins 有一个与我的输入匹配的键,我想返回该键的值。 logins = { 'admin':'admin', 'turtle':'password1
在 Perl 世界中有一个很棒的东西叫做 CPAN .它是开源 Perl 库的大型存储。 我使用来自 CPAN 的模块,我已经发布了 several distributions myself . 我使
这个问题已经有答案了: Is there a Python dict without values? (3 个回答) 已关闭 3 年前。 我有一个问题,我想跟踪大量值。如果我从未遇到过该值,我将执行操
想知道这是否可能。 我们有一个第 3 方库,其中包含有关用户的识别信息... 与库的主要交互是通过一个以字符串为键的 HashTable,并返回该键的信息对象图。 问题是, key 显然是区分大小写的
我是 .NET 编程的新手。对不起,如果这个问题以前被问过。 我目前正在学习 F#。 Dictionary、Hashtable 和 Map 之间有什么区别?我应该什么时候使用? 我还有一个标题中没有提
我正在尝试使用SVM进行3类分类。为此,我正在SVM培训期间准备词汇表。但是,由于我在SVM预测期间获得随机结果,因此我怀疑我的词汇创建方法中存在一些问题。我创建词汇的代码如下: //Mat trai
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
假设我有一个以下形式的嵌套字典: {'geo': {'bgcolor': 'white','lakecolor': 'white','caxis': {'gridcolor': 'white', 'l
我有一个 java 应用程序,每秒启动和停止数亿个项目(从外部脚本调用)多次。 Input: String key Output: int value 此应用程序的目的是在从未永远改变的Map(约30
我正在尝试找出字典与集合和数组相比的相对优势和功能。 我发现了一篇很棒的文章here但找不到一个简单的表格来比较所有不同的功能。 有人知道吗? 最佳答案 请参阅下表,对集合和字典进行有用的比较。 (该
我想要一个字典,它可以为字典中没有的任何键返回一个指定的值,例如: var dict = new DictWithDefValues("not specified"); dict.Add("bob78
我是 python 新手,目前仍在学习如何处理列表和字典。 我有这两个功能 def food_database(item_name, size_serv, calorie_serv, prot
我是一名优秀的程序员,十分优秀!