コード例 #1
0
ファイル: adadelta.py プロジェクト: youht88/dimpy
    def step(self):
        for x in self.params:
            if (x.requiresGrad):
                if x.grad is None: continue
                state = self.state[x.gradFn.name]

                if x.grad.shape != x.shape:
                    grad = x.grad.view().mean(0)
                else:
                    grad = x.grad.view()

                if "g2" in state:
                    state["g2"] = self.rho * state["g2"] + (1 -
                                                            self.rho) * grad**2
                else:
                    state["g2"] = dim.zeros(grad.shape)

                if not ("delta" in state):
                    state["delta"] = (1 - self.rho) * grad**2
                else:
                    state["delta"] = self.rho * state["delta"] + (
                        1 - self.rho) * delta**2

                part1 = state["delta"].sqrt() + self.eps
                part2 = state["g2"].sqrt() + self.eps
                delta = part1 / part2

                x -= delta
コード例 #2
0
def maxUnpool2d(inputs, indices, ks):
    if (len(inputs.shape) != 4):
        raise Exception("input({})不符合[miniBatch*inChannels*H*W]的形状要求".format(
            inputs.shape))
    indices = dim.vector(indices)
    if (inputs.shape != indices.shape):
        raise Exception("input({})与indices({})的形状不一致".format(
            inputs.shape, indices.shape))
    a = []
    ks = int(ks)
    for i, channel in enumerate(inputs):
        a.append([])
        for j, kernel in enumerate(channel):
            a[i].append([])
            h = kernel.shape[0]
            w = kernel.shape[1]
            q = []
            for k in range(h):
                p = []
                for l in range(w):
                    factor = dim.zeros([ks, ks])
                    r = math.floor(indices[i, j, k, l] / ks)
                    c = math.floor(indices[i, j, k, l] % ks)
                    factor[r, c] = 1
                    p.append(kernel[k, l] * factor)
                q.append(dim.concat(p, 1))
            a[i][j] = dim.concat(q, 0)
    rst = dim.vector(a)
    return rst
コード例 #3
0
def maxUnpool1d(inputs, indices, ks):
    if (len(inputs.shape) != 3):
        raise Exception("input({})不符合[miniBatch*inChannels*W]的形状要求".format(
            inputs.shape))
    print("maxUnpool1d indices:", indices)
    indices = dim.vector(indices)
    if (inputs.shape != indices.shape):
        raise Exception("input({})与indices({})的形状不一致".format(
            inputs.shape, indices.shape))
    a = []
    ks = int(ks)
    for i, channel in enumerate(inputs):
        a.append([])
        for j, kernel in enumerate(channel):
            a[i].append([])
            p = []
            w = kernel.size
            for k in range(w):
                factor = dim.zeros(ks)
                r = math.floor(indices[i, j, k] % ks)
                factor[r] = 1
                p.append(kernel[k] * factor)
            a[i][j] = dim.concat(p, 0)

    rst = dim.vector(a)
    return rst
コード例 #4
0
 def partGrad(self, partial, prevOp):
     if (partial.type != "Variable"):
         raise Exception("partial参数必须是Variable类型")
     if (self.catch and self._grads.get(partial.name, None)):
         return self._grads[partial.name]
     if (prevOp is None): prevOp = Constant(dim.ones(self.eval().shape))
     zeros = dim.zeros(self.left.eval().shape)
     zeros.reshape(zeros.size)[self.args["indices"]] = 1
     part1 = Constant(zeros)
     part2 = dim.autograd.MulOperate.wrapper(part1, prevOp)
     part3 = self.left.partGrad(partial, part2)
     rst = part3
     self._grads[partial.name] = rst
     return rst
コード例 #5
0
ファイル: onemax.py プロジェクト: canercandan/dim
def main():
    parser = dim.Parser(description='The python version of the Dynamic Islands Model for OneMax problem.', verbose='error')
    parser.add_argument('--nislands', '-N', help='number of islands', type=int, default=4)
    parser.add_argument('--popSize', '-P', help='size of population', type=int, default=100)
    parser.add_argument('--chromSize', '-n', help='size of problem', type=int, default=1000)
    parser.add_argument('--definedChromSize', help='size of problem set to True', type=int, default=0)
    parser.add_argument('--targetFitness', '-T', help='optimum to reach (0: disable)', type=int)
    parser.add_argument('--maxGen', '-G', help='maximum number of generation (0: disable)', type=int, default=0)
    parser.add_argument('--alpha', '-a', help='the alpha parameter of the learning process', type=float, default=.2)
    parser.add_argument('--alphaF', '-A', help='the alpha parameter of the learning process', type=float, default=.01)
    parser.add_argument('--beta', '-b', help='the beta parameter of the learning process', type=float, default=.01)
    parser.add_argument('--strategy', '-S', help='set a strategy of rewarding', default=dim.Best)
    parser.add_argument('--best', '-B', action='store_const', const=dim.Best, dest='strategy', help='best strategy (see -S)')
    parser.add_argument('--avg', '-M', action='store_const', const=dim.Average, dest='strategy', help='average strategy (see -S)')
    parser.add_argument('--stepTimer', help='step of time used for printing results to files', type=int, default=0)
    parser.add_argument('--seed', help='set the seed value for the generator of pseudo-random numbers', type=int, default=0)
    args = parser()

    if args.seed:
        dim.random.seed(args.seed)
        print("seed:", args.seed)

    N = args.nislands
    P = args.popSize
    n = args.chromSize
    T = args.targetFitness
    G = args.maxGen

    # init = dim.ZerofyInit(n)
    init = dim.DefinedInit(n,args.definedChromSize)
    init_matrix = dim.InitMatrix(False,1/N)
    __eval = OneMaxFullEval()
    reward = args.strategy(args.alpha, args.beta)
    updater = dim.Updater(reward)
    memorizer = dim.Memorize()

    matrix = dim.zeros( (N,N) )
    init_matrix(matrix)

    pop_set = []
    data_set = []

    for i in range(N):
        pop_set += [dim.Population(P,init)]
        data_set += [dim.IslandData(i,N)]

    islands = []
    for i in range(N):
        pop = pop_set[i]
        data = data_set[i]

        data.proba = matrix[i].copy()
        dim.apply(pop, __eval)

        # mon = None
        # if data.rank == 0:
        #     mon = BitMutation(1, True)
        # else:
        #     mon = DetBitFlip( (data.rank-1)*2+1 )

        # asso = [(BitMutation, 1, True),
        #         (DetBitFlip, 1),
        #         (DetBitFlip, 3),
        #         (DetBitFlip, 5),]

        asso = [(DetBitFlip, 1),
                (DetBitFlip, 3),
                (DetBitFlip, 5),
                (DetBitFlip, 7),]

        assert len(asso) == args.nislands

        mon = asso[data.rank][0](*asso[data.rank][1:])

        print(i, mon)

        evolver = dim.Evolver(__eval, mon)
        feedbacker = dim.Feedbacker(pop_set, data_set, args.alphaF)
        migrator = dim.Migrator(pop_set, data_set)

        fit = dim.Fit(T if T else n)
        cont = dim.Combined(fit)
        checkpoint = dim.Checkpoint(cont)

        if G:
            maxgen = dim.MaxGen(G)
            cont.add(maxgen)

        monitor = dim.PrintMonitor( out=open('result_monitor_%d' % data.rank, 'w'), stepTimer=args.stepTimer )
        monitor.addTo(checkpoint)

        for stat in [dim.IslandRank(),
                     dim.ElapsedTime(),
                     dim.ElapsedTimeBetweenGenerations(),
                     dim.Generation(),
                     dim.PopSize(),
                     dim.AverageFitness(),
                     dim.BestFitness(),
                     dim.Probabilities(),
                     dim.CommingProbabilities(pop_set, data_set),
                     # dim.SumOfGoingProbabilities(),
                     # dim.SumOfCommingProbabilities(pop_set, data_set),
                     # dim.Feedbacks(),
        ]:
            stat.addTo(checkpoint)
            monitor.add(stat)

        island = dim.Algo(evolver, feedbacker, updater, memorizer,
                          migrator, checkpoint, pop_set, data_set)
        t = dim.Thread(target=island, args=[pop,data])
        islands += [t]

    for island in islands:
        island.start()

    try:
        for island in islands:
            island.join()
    except KeyboardInterrupt as e:
        print("Interrupted by user")
コード例 #6
0
ファイル: onemax.py プロジェクト: canercandan/dim
def main():
    parser = dim.Parser(
        description=
        'The python version of the Dynamic Islands Model for OneMax problem.',
        verbose='error')
    parser.add_argument('--nislands',
                        '-N',
                        help='number of islands',
                        type=int,
                        default=4)
    parser.add_argument('--popSize',
                        '-P',
                        help='size of population',
                        type=int,
                        default=100)
    parser.add_argument('--chromSize',
                        '-n',
                        help='size of problem',
                        type=int,
                        default=1000)
    parser.add_argument('--definedChromSize',
                        help='size of problem set to True',
                        type=int,
                        default=0)
    parser.add_argument('--targetFitness',
                        '-T',
                        help='optimum to reach (0: disable)',
                        type=int)
    parser.add_argument('--maxGen',
                        '-G',
                        help='maximum number of generation (0: disable)',
                        type=int,
                        default=0)
    parser.add_argument('--alpha',
                        '-a',
                        help='the alpha parameter of the learning process',
                        type=float,
                        default=.2)
    parser.add_argument('--alphaF',
                        '-A',
                        help='the alpha parameter of the learning process',
                        type=float,
                        default=.01)
    parser.add_argument('--beta',
                        '-b',
                        help='the beta parameter of the learning process',
                        type=float,
                        default=.01)
    parser.add_argument('--strategy',
                        '-S',
                        help='set a strategy of rewarding',
                        default=dim.Best)
    parser.add_argument('--best',
                        '-B',
                        action='store_const',
                        const=dim.Best,
                        dest='strategy',
                        help='best strategy (see -S)')
    parser.add_argument('--avg',
                        '-M',
                        action='store_const',
                        const=dim.Average,
                        dest='strategy',
                        help='average strategy (see -S)')
    parser.add_argument('--stepTimer',
                        help='step of time used for printing results to files',
                        type=int,
                        default=0)
    parser.add_argument(
        '--seed',
        help='set the seed value for the generator of pseudo-random numbers',
        type=int,
        default=0)
    args = parser()

    if args.seed:
        dim.random.seed(args.seed)
        print("seed:", args.seed)

    N = args.nislands
    P = args.popSize
    n = args.chromSize
    T = args.targetFitness
    G = args.maxGen

    # init = dim.ZerofyInit(n)
    init = dim.DefinedInit(n, args.definedChromSize)
    init_matrix = dim.InitMatrix(False, 1 / N)
    __eval = OneMaxFullEval()
    reward = args.strategy(args.alpha, args.beta)
    updater = dim.Updater(reward)
    memorizer = dim.Memorize()

    matrix = dim.zeros((N, N))
    init_matrix(matrix)

    pop_set = []
    data_set = []

    for i in range(N):
        pop_set += [dim.Population(P, init)]
        data_set += [dim.IslandData(i, N)]

    islands = []
    for i in range(N):
        pop = pop_set[i]
        data = data_set[i]

        data.proba = matrix[i].copy()
        dim.apply(pop, __eval)

        # mon = None
        # if data.rank == 0:
        #     mon = BitMutation(1, True)
        # else:
        #     mon = DetBitFlip( (data.rank-1)*2+1 )

        # asso = [(BitMutation, 1, True),
        #         (DetBitFlip, 1),
        #         (DetBitFlip, 3),
        #         (DetBitFlip, 5),]

        asso = [
            (DetBitFlip, 1),
            (DetBitFlip, 3),
            (DetBitFlip, 5),
            (DetBitFlip, 7),
        ]

        assert len(asso) == args.nislands

        mon = asso[data.rank][0](*asso[data.rank][1:])

        print(i, mon)

        evolver = dim.Evolver(__eval, mon)
        feedbacker = dim.Feedbacker(pop_set, data_set, args.alphaF)
        migrator = dim.Migrator(pop_set, data_set)

        fit = dim.Fit(T if T else n)
        cont = dim.Combined(fit)
        checkpoint = dim.Checkpoint(cont)

        if G:
            maxgen = dim.MaxGen(G)
            cont.add(maxgen)

        monitor = dim.PrintMonitor(out=open('result_monitor_%d' % data.rank,
                                            'w'),
                                   stepTimer=args.stepTimer)
        monitor.addTo(checkpoint)

        for stat in [
                dim.IslandRank(),
                dim.ElapsedTime(),
                dim.ElapsedTimeBetweenGenerations(),
                dim.Generation(),
                dim.PopSize(),
                dim.AverageFitness(),
                dim.BestFitness(),
                dim.Probabilities(),
                dim.CommingProbabilities(pop_set, data_set),
                # dim.SumOfGoingProbabilities(),
                # dim.SumOfCommingProbabilities(pop_set, data_set),
                # dim.Feedbacks(),
        ]:
            stat.addTo(checkpoint)
            monitor.add(stat)

        island = dim.Algo(evolver, feedbacker, updater, memorizer, migrator,
                          checkpoint, pop_set, data_set)
        t = dim.Thread(target=island, args=[pop, data])
        islands += [t]

    for island in islands:
        island.start()

    try:
        for island in islands:
            island.join()
    except KeyboardInterrupt as e:
        print("Interrupted by user")