From b4b729a15e577c68f64e0ac69fb299de6f5f706c Mon Sep 17 00:00:00 2001
From: Joseph Redmon <pjreddie@gmail.com>
Date: Thu, 17 Apr 2014 16:58:24 +0000
Subject: [PATCH] Merge branch 'master' of pjreddie.com:jnet
---
src/convolutional_layer.c | 72 +++++++++++++++++-------------------
1 files changed, 34 insertions(+), 38 deletions(-)
diff --git a/src/convolutional_layer.c b/src/convolutional_layer.c
index f7c9c10..6916eeb 100644
--- a/src/convolutional_layer.c
+++ b/src/convolutional_layer.c
@@ -285,52 +285,48 @@
return float_to_image(h,w,c,layer.filters+i*h*w*c);
}
-void visualize_convolutional_layer(convolutional_layer layer, char *window)
+image *weighted_sum_filters(convolutional_layer layer, image *prev_filters)
{
- int color = 1;
- int border = 1;
- int h,w,c;
- int size = layer.size;
- h = size;
- w = (size + border) * layer.n - border;
- c = layer.c;
- if(c != 3 || !color){
- h = (h+border)*c - border;
- c = 1;
+ image *filters = calloc(layer.n, sizeof(image));
+ int i,j,k,c;
+ if(!prev_filters){
+ for(i = 0; i < layer.n; ++i){
+ filters[i] = copy_image(get_convolutional_filter(layer, i));
+ }
}
-
- image filters = make_image(h,w,c);
- int i,j;
- for(i = 0; i < layer.n; ++i){
- int w_offset = i*(size+border);
- image k = get_convolutional_filter(layer, i);
- //printf("%f ** ", layer.biases[i]);
- //print_image(k);
- image copy = copy_image(k);
- normalize_image(copy);
- for(j = 0; j < k.c; ++j){
- //set_pixel(copy,0,0,j,layer.biases[i]);
- }
- if(c == 3 && color){
- embed_image(copy, filters, 0, w_offset);
- }
- else{
- for(j = 0; j < k.c; ++j){
- int h_offset = j*(size+border);
- image layer = get_image_layer(k, j);
- embed_image(layer, filters, h_offset, w_offset);
- free_image(layer);
+ else{
+ image base = prev_filters[0];
+ for(i = 0; i < layer.n; ++i){
+ image filter = get_convolutional_filter(layer, i);
+ filters[i] = make_image(base.h, base.w, base.c);
+ for(j = 0; j < layer.size; ++j){
+ for(k = 0; k < layer.size; ++k){
+ for(c = 0; c < layer.c; ++c){
+ float weight = get_pixel(filter, j, k, c);
+ image prev_filter = copy_image(prev_filters[c]);
+ scale_image(prev_filter, weight);
+ add_into_image(prev_filter, filters[i], 0,0);
+ free_image(prev_filter);
+ }
+ }
}
}
- free_image(copy);
}
- image delta = get_convolutional_delta(layer);
+ return filters;
+}
+
+image *visualize_convolutional_layer(convolutional_layer layer, char *window, image *prev_filters)
+{
+ image *single_filters = weighted_sum_filters(layer, 0);
+ show_images(single_filters, layer.n, window);
+
+ image delta = get_convolutional_image(layer);
image dc = collapse_image_layers(delta, 1);
char buff[256];
- sprintf(buff, "%s: Delta", window);
+ sprintf(buff, "%s: Output", window);
show_image(dc, buff);
+ save_image(dc, buff);
free_image(dc);
- show_image(filters, window);
- free_image(filters);
+ return single_filters;
}
--
Gitblit v1.10.0