首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用itself的前馈网络呢?

如何使用itself的前馈网络呢?
EN

Stack Overflow用户
提问于 2022-07-14 03:40:09
回答 1查看 121关注 0票数 1

我想使用create的神经网络,这样我就可以控制如何选择最合适的人(训练)以及其他事情,但是create的前馈网络的源代码不能单独使用(创建一个配置文件和基因组)。

nn.feed_forward的源代码

代码语言:javascript
复制
from neat.graphs import feed_forward_layers


class FeedForwardNetwork(object):
    def __init__(self, inputs, outputs, node_evals):
        self.input_nodes = inputs
        self.output_nodes = outputs
        self.node_evals = node_evals
        self.values = dict((key, 0.0) for key in inputs + outputs)

    def activate(self, inputs):
        if len(self.input_nodes) != len(inputs):
            raise RuntimeError("Expected {0:n} inputs, got {1:n}".format(len(self.input_nodes), len(inputs)))

        for k, v in zip(self.input_nodes, inputs):
            self.values[k] = v

        for node, act_func, agg_func, bias, response, links in self.node_evals:
            node_inputs = []
            for i, w in links:
                node_inputs.append(self.values[i] * w)
            s = agg_func(node_inputs)
            self.values[node] = act_func(bias + response * s)

        return [self.values[i] for i in self.output_nodes]


    @staticmethod
    def create(genome, config): # I don't want to have to pass in either arguments to create a network
        """ Receives a genome and returns its phenotype (a FeedForwardNetwork). """

        # Gather expressed connections.
        connections = [cg.key for cg in genome.connections.values() if cg.enabled]

        layers = feed_forward_layers(config.genome_config.input_keys, config.genome_config.output_keys, connections)
        node_evals = []
        for layer in layers:
            for node in layer:
                inputs = []
                for conn_key in connections:
                    inode, onode = conn_key
                    if onode == node:
                        cg = genome.connections[conn_key]
                        inputs.append((inode, cg.weight))

                ng = genome.nodes[node]
                aggregation_function = config.genome_config.aggregation_function_defs.get(ng.aggregation)
                activation_function = config.genome_config.activation_defs.get(ng.activation)
                node_evals.append((node, activation_function, aggregation_function, ng.bias, ng.response, inputs))

        return FeedForwardNetwork(config.genome_config.input_keys, config.genome_config.output_keys, node_evals)

我也希望能够变异神经网络(连接,权重,等等)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-22 01:46:09

要创建FeedForwardNetwork,您需要使用create方法或手动设置inputs, outputs, node_evals

输入

input是输入节点的“键”(引用文档)的列表。它是一个list of int,类似于[-1, -2, ...,-num_inputs],其中num_inputs是您在文件中设置的输入节点的数量。

输出

output是输出节点的“键”列表。它是一个list of int,类似于[0, 1, 2, ..., (num_outputs-1)],其中num_outputs是您在config_file中设置的输出节点的数量。

node_evals

node_evals是一个元组列表。

元组的大小:

元组中的每个元素对应于一个具有" in“连接的节点,因此元组的大小是网络中的num_of_hiddens+num_of_outputs。(注意,这是由基因组而不是配置决定的,因此"num_of_outputs“和"num_of_hiddens”可以不同于config_file中的"num_outputs“和"num_hidden”)。

元组中的元素:

正如您在create方法和activate方法中所看到的,元组中的一个元素包括:

  1. tuple[0]:对应节点的键。
  2. tuple[1]:节点的activation_function。我认为它是一个输入浮点数和输出浮点数的函数。
  3. tuple[2]:节点的aggregation_function。我认为任何函数都可以输入浮点数列表,并输出另一个浮点数。例如,计算列表中元素的和。
  4. tuple[3]:节点的偏差,浮点。
  5. tuple[4]:节点的响应,浮动。
  6. tuple[5]:为这个神经元(节点)提供输入的链接,表示为节点i。这是一个元组的列表。tuple[5]的长度是当前神经元i的输入神经元数。对于tuple[5]内部的子元组,sub_tuple[0]是输入神经元的关键(这里,“输入”是指一个节点输入到节点i,而不是整个网络的“输入”),而sub_tuple[1] (属于float类型)是某个输入神经元与节点i之间的连接权重。

如果您查看activate的实现,您可能会更好地理解"activation_function“、"aggregation_function”、“偏差”、“响应”和“链接”的物理含义。

我还建议您在这里上运行一个示例,在创建FeedForwardNetwork时添加一个断点,并检查数据类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72974928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档