| 107 | return round(x, 3) |
| 108 | |
| 109 | def convolute(self, data, convs, w_convs, thre_convs, conv_step): |
| 110 | # convolution process |
| 111 | size_conv = convs[0] |
| 112 | num_conv = convs[1] |
| 113 | size_data = np.shape(data)[0] |
| 114 | # get the data slice of original image data, data_focus |
| 115 | data_focus = [] |
| 116 | for i_focus in range(0, size_data - size_conv + 1, conv_step): |
| 117 | for j_focus in range(0, size_data - size_conv + 1, conv_step): |
| 118 | focus = data[ |
| 119 | i_focus : i_focus + size_conv, j_focus : j_focus + size_conv |
| 120 | ] |
| 121 | data_focus.append(focus) |
| 122 | # calculate the feature map of every single kernel, and saved as list of matrix |
| 123 | data_featuremap = [] |
| 124 | size_feature_map = int((size_data - size_conv) / conv_step + 1) |
| 125 | for i_map in range(num_conv): |
| 126 | featuremap = [] |
| 127 | for i_focus in range(len(data_focus)): |
| 128 | net_focus = ( |
| 129 | np.sum(np.multiply(data_focus[i_focus], w_convs[i_map])) |
| 130 | - thre_convs[i_map] |
| 131 | ) |
| 132 | featuremap.append(self.sig(net_focus)) |
| 133 | featuremap = np.asmatrix(featuremap).reshape( |
| 134 | size_feature_map, size_feature_map |
| 135 | ) |
| 136 | data_featuremap.append(featuremap) |
| 137 | |
| 138 | # expanding the data slice to one dimension |
| 139 | focus1_list = [] |
| 140 | for each_focus in data_focus: |
| 141 | focus1_list.extend(self.Expand_Mat(each_focus)) |
| 142 | focus_list = np.asarray(focus1_list) |
| 143 | return focus_list, data_featuremap |
| 144 | |
| 145 | def pooling(self, featuremaps, size_pooling, pooling_type="average_pool"): |
| 146 | # pooling process |