Beispiel #1
0
void mkimg(char *cfgfile, char *weightfile, int h, int w, int num, char *prefix)
{
    network *net = load_network(cfgfile, weightfile, 0);
    image *ims = get_weights(net->layers[0]);
    int n = net->layers[0].n;
    int z;
    for(z = 0; z < num; ++z){
        image im = make_image(h, w, 3);
        fill_image(im, .5);
        int i;
        for(i = 0; i < 100; ++i){
            image r = copy_image(ims[rand()%n]);
            rotate_image_cw(r, rand()%4);
            random_distort_image(r, 1, 1.5, 1.5);
            int dx = rand()%(w-r.w);
            int dy = rand()%(h-r.h);
            ghost_image(r, im, dx, dy);
            free_image(r);
        }
        char buff[256];
        sprintf(buff, "%s/gen_%d", prefix, z);
        save_image(im, buff);
        free_image(im);
    }
    free_network(net);
}
image *visualize_convolutional_layer(convolutional_layer l, char *window, image *prev_weights)
{
    image *single_weights = get_weights(l);
    show_images(single_weights, l.n, window);

    image delta = get_convolutional_image(l);
    image dc = collapse_image_layers(delta, 1);
    char buff[256];
    //sprintf(buff, "%s: Output", window);
    //show_image(dc, buff);
    //save_image(dc, buff);
    free_image(dc);
    return single_weights;
}
Beispiel #3
0
void NETWORK::rewire( int _laps )
{
  // weights
  std::vector<double> weights;
  get_weights( weights );
  shuffle_vector( weights );

  // structure
  int wirings_left = _laps;
  int s1, s2, deg1, deg2, p1, p2, t1, t2;
  while( wirings_left > 0 )
  {
    // choose two edge randomly
    s1 = Ran.IRandom( 0, Order-1 );
    deg1 = Nodes[s1]->outdegree();
    s2 = Ran.IRandom( 0, Order-1 );
    deg2 = Nodes[s2]->outdegree();
    if( s1 != s2 && deg1 != 0 && deg2 != 0 )
    {
      p1 = Ran.IRandom( 0, deg1-1 );
      t1 = Nodes[s1]->outneighbor(p1)->id();
      p2 = Ran.IRandom( 0, deg2-1 );
      t2 = Nodes[s2]->outneighbor(p2)->id();
      if( t1 != t2 && t1 != s2 && t2 != s1 )
      {
        remove_edge( s1, t1 );
        remove_edge( s2, t2 );
        add_edge( s1, t2, 1.0 );
        add_edge( s2, t1, 1.0 );
        wirings_left--;
      }
    }
  }

  // set weights
  int deg;
  for(int i=0; i<Order; i++)
  {
    deg = Nodes[i]->outdegree();
    for(int j=0; j<deg; j++)
    {
      Nodes[i]->setOutWeight( j, weights.back() );
      weights.pop_back();
    }
  }
}
/*
 * Determines whether a connection is possible between
 * pairs of local and remote interfaces. To determine
 * reachability, the kernel's routing table is queried.
 * Higher weightings are given to connections on the same
 * network.
 */
static opal_reachable_t* netlink_reachable(opal_list_t *local_if,
                                           opal_list_t *remote_if)
{
    opal_reachable_t *reachable_results = NULL;
    int i, j;
    opal_if_t *local_iter, *remote_iter;

    reachable_results = opal_reachable_allocate(local_if->opal_list_length,
                                                remote_if->opal_list_length);
    if (NULL == reachable_results) {
        return NULL;
    }

    i = 0;
    OPAL_LIST_FOREACH(local_iter, local_if, opal_if_t) {
        j = 0;
        OPAL_LIST_FOREACH(remote_iter, remote_if, opal_if_t) {
            reachable_results->weights[i][j] = get_weights(local_iter, remote_iter);
            j++;
        }