I am confused. When i store the weights and bias from a convolutional layer using:
kernels_int_in =conv2d.weight.detach().cpu() conv2d.bias.detach().cpu()
the output shape for weight is [out_channel,in_channel,kernal_height,Kernal_width] and the size of the bias is a 1D vector of size [out_channel].
when the weights are plotted using:
kernels_t = kernels_int_in - kernels_int_in.min() kernels_t = kernels_t / kernels_t.max() ind=0 fig, axarr = plt.subplots(4,32) plt.subplots_adjust(wspace=.02, hspace=.02) while ind !=128: for idx in range(4): for idy in range(32): axarr[idx,idy].imshow(kernels_t[ind,0,:,:].squeeze()) # axarr[idx,idy].imshow(act[ind]) ind=ind+1
the question is, why are the in_channels stored and what are they telling me? Also over 30 epochs in my case the values of the out_channels do not change significantly, is this suggesting that the kernels are not appropriate since the overall error stays quite high?