I need to fill images with other image patches during training. Since I’m training with mini-batch, is there any efficient way to do this?
For example, I have a mini-batch of images of size [B, 3, 128, 128]. I also have patches of size [B, 4, 3, 32, 32], where 4 is the number of patches. Besides, I have the bounding box indicating the location of patches of size [B, 4, 4]. How can I fill in the patches in a batch-wise way? You can ignore the overlap between patches.
import torch
B = 1 # num of batches
C = 3 # num of channels
S = 16 # size of img
img = torch.zeros(B,C,S,S)
s = 4 # size of patch
n_patch = 4 # num of patches
patches = torch.arange(B*C*n_patch*s*s).view(B,n_patch,C,s,s)
# generate 4*B boxes
# boxes: x_min,y_min,x_max,y_max. Here, we take four corner patches. Also, we simply set all batch share the same patch coordinates.
base_boxes = torch.tensor([[0,0,s,s],[S-s,0,S,s],[0,S-s,s,S],[S-s,S-s,S,S]])
bboxes = base_boxes.view(1,-1,4).repeat(B,1,1)
for batch_id in range(B):
for patch_id in range(n_patch):
bbox = bboxes[batch_id,patch_id,:]
img[batch_id,:,bbox[0]:bbox[2],bbox[1]:bbox[3]] = batches[batch_id,patch_id,...]
img
# tensor([[[[ 0., 1., 2., 3., 0., 0., 0., 0., 0., 0., 0., 0., 96., 97., 98., 99.],
# [ 4., 5., 6., 7., 0., 0., 0., 0., 0., 0., 0., 0., 100., 101., 102., 103.],
# [ 8., 9., 10., 11., 0., 0., 0., 0., 0., 0., 0., 0., 104., 105., 106., 107.],
# [ 12., 13., 14., 15., 0., 0., 0., 0., 0., 0., 0., 0., 108., 109., 110., 111.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 48., 49., 50., 51., 0., 0., 0., 0., 0., 0., 0., 0., 144., 145., 146., 147.],
# [ 52., 53., 54., 55., 0., 0., 0., 0., 0., 0., 0., 0., 148., 149., 150., 151.],
# [ 56., 57., 58., 59., 0., 0., 0., 0., 0., 0., 0., 0., 152., 153., 154., 155.],
# [ 60., 61., 62., 63., 0., 0., 0., 0., 0., 0., 0., 0., 156., 157., 158., 159.]],
# [[ 16., 17., 18., 19., 0., 0., 0., 0., 0., 0., 0., 0., 112., 113., 114., 115.],
# [ 20., 21., 22., 23., 0., 0., 0., 0., 0., 0., 0., 0., 116., 117., 118., 119.],
# [ 24., 25., 26., 27., 0., 0., 0., 0., 0., 0., 0., 0., 120., 121., 122., 123.],
# [ 28., 29., 30., 31., 0., 0., 0., 0., 0., 0., 0., 0., 124., 125., 126., 127.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 64., 65., 66., 67., 0., 0., 0., 0., 0., 0., 0., 0., 160., 161., 162., 163.],
# [ 68., 69., 70., 71., 0., 0., 0., 0., 0., 0., 0., 0., 164., 165., 166., 167.],
# [ 72., 73., 74., 75., 0., 0., 0., 0., 0., 0., 0., 0., 168., 169., 170., 171.],
# [ 76., 77., 78., 79., 0., 0., 0., 0., 0., 0., 0., 0., 172., 173., 174., 175.]],
# [[ 32., 33., 34., 35., 0., 0., 0., 0., 0., 0., 0., 0., 128., 129., 130., 131.],
# [ 36., 37., 38., 39., 0., 0., 0., 0., 0., 0., 0., 0., 132., 133., 134., 135.],
# [ 40., 41., 42., 43., 0., 0., 0., 0., 0., 0., 0., 0., 136., 137., 138., 139.],
# [ 44., 45., 46., 47., 0., 0., 0., 0., 0., 0., 0., 0., 140., 141., 142., 143.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
# [ 80., 81., 82., 83., 0., 0., 0., 0., 0., 0., 0., 0., 176., 177., 178., 179.],
# [ 84., 85., 86., 87., 0., 0., 0., 0., 0., 0., 0., 0., 180., 181., 182., 183.],
# [ 88., 89., 90., 91., 0., 0., 0., 0., 0., 0., 0., 0., 184., 185., 186., 187.],
# [ 92., 93., 94., 95., 0., 0., 0., 0., 0., 0., 0., 0., 188., 189., 190., 191.]]]])
Related
I have a tensor:
tensor([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]],
device='cuda:0', grad_fn=<AsStridedBackward>)
torch.Size([3, 176])
You see that the first and the third have all zeroes. I'd like to remove it and change this to have size of [1, 176].
If I do print((mask != 0).nonzero()), then I see:
tensor([[ 0, 136],
[ 0, 137],
[ 0, 138],
[ 0, 139],
[ 0, 140],
[ 0, 141],
[ 0, 142],
[ 0, 143],
[ 0, 144],
[ 0, 145],
[ 0, 146],
[ 0, 147],
[ 0, 148],
[ 0, 149],
[ 0, 150],
[ 0, 151],
[ 0, 152],
[ 0, 153],
[ 0, 154],
[ 0, 155],
[ 0, 156],
[ 0, 157],
[ 0, 158],
[ 0, 159]], device='cuda:0')
So I feel like that's a part of it, but how do I further reduce the tensor?
# let x be some tensor with nonzero somewhere
x = torch.zeros((2, 5))
x[1, 2] = 1
nonZeroRows = torch.abs(x).sum(dim=1) > 0
x = x[nonZeroRows]
I'm trying to save black and white images from a 6 x 6 array, that I have imported, but the images are saving as completely black, even though the array has sections in the middle that greater than 0.
import scipy.io
from PIL import Image
importedImageList = [[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0.32941176, 0.87058824, 0.2627451, 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0.7254902, 0.99607843, 0.44705882, 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0.62352941, 0.99607843, 0.28235294, 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0.59215686, 0.99607843, 0.44705882, 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0.23529412, 0.99607843, 0.63921569, 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0.23921569, 0.4745098, 0.4745098, 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0.14117647, 0.94509804, 0.89019608, 0.06666667, 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0.12156863, 0.52156863,
0.94901961, 0.99607843, 0.99607843, 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0.77647059, 0.99607843, 0.25882353, 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0.01176471, 0.14901961, 0.87843137, 0.99607843,
0.99607843, 0.99607843, 0.81176471, 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0.77647059, 0.88235294, 0.05490196, 0.,
0., 0., 0., 0., 0., 0.,
0., 0.0745098, 0.79607843, 0.99607843, 0.99607843, 0.99607843,
0.99607843, 0.85882353, 0.07058824, 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0.77647059, 0.99607843, 0.2627451, 0.,
0., 0., 0., 0., 0., 0.,
0.29411765, 0.86666667, 0.99607843, 0.99607843, 0.45098039, 0.20392157,
0.20392157, 0.15686275, 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0.77647059, 0.99607843, 0.2627451, 0.,
0., 0., 0., 0., 0.03529412, 0.49411765,
0.98431373, 0.99607843, 0.85882353, 0.30196078, 0.00392157, 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0.77647059, 0.99607843, 0.2627451, 0.,
0., 0., 0.23137255, 0.52156863, 0.80392157, 0.99607843,
0.94117647, 0.65098039, 0.1372549, 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0.77647059, 0.98039216, 0.23137255, 0.,
0.08627451, 0.50588235, 0.97647059, 0.99607843, 0.97254902, 0.71372549,
0.22352941, 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0.77647059, 0.89803922, 0.08235294, 0.3254902,
0.91372549, 0.99607843, 0.99607843, 0.73333333, 0.22745098, 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0.77647059, 0.99607843, 0.9254902, 0.99215686,
1., 0.93333333, 0.24313725, 0.01960784, 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0.66666667, 0.99607843, 0.99607843, 0.81960784,
0.3254902, 0.17254902, 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0.20392157, 0.54901961, 0.41568627, 0.07058824,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ],
[0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., ]]
importedImage = np.array(importedImageList)
print(importedImage)
img = Image.fromarray(importedImage, '1')
img.save('my.png')
img.show()
The image is just completely black, but there should be a large round spot in the center. After following advice, I can now see some light, but the print out of the image should be a number (7), but is instead all lumped at the bottom of the printed image.
You have a single channel floating point image, and apparently the columns of your image are stored in that list. To obtain the desired image, the following code might be helpful:
from matplotlib import pyplot as plt
import numpy as np
from PIL import Image
importedImageList = [[ ... ]]
# Transpose resulting array, because columns are stored in the list
importedImage = np.array(importedImageList).T
# Show image, explicitly set scale 0 ... 1
plt.imshow(importedImage, vmin=0, vmax=1, cmap='gray')
plt.colorbar()
plt.tight_layout()
plt.show()
# Explicitly convert to range 0 ... 255 and uint8 type for saving
img = Image.fromarray(np.uint8(importedImage * 255))
img.save('my.png')
The plot looks like this:
And that's the saved image:
Hope that helps!
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.8.1
Matplotlib: 3.2.0rc3
NumPy: 1.18.1
Pillow: 7.0.0
----------------------------------------
I try to train Lenet defined here Solving in Python with LeNet
to train the digit-recognition data set on kaggle. I first use the tutorial provided hereCreate lmdb to transfer data into lmdb format. Then I follow the instruction in link 1(Solving in Python with LeNet) to construct training, testing and solver prototxts. However, when I extract solver from solver.prototxt, I found that each element in image data is zero. Is there anything wrong with my code?
import pandas as pd
import lmdb
import caffe
import numpy as np
import numpy as np
from caffe import layers as L, params as P
from pylab import *
import os, sys
from caffe.proto import caffe_pb2
%matplotlib inline
train_original = pd.read_csv(path/to/my/train.csv)
test = pd.read_csv(path/to/my/test.csv)
train_obs, dim = train_data.shape
val_obs, dim = val_data.shape
train_data_array = np.array(train_data, dtype = float32)
train_label_array = np.array(train_label, dtype = float32)
val_data_array = np.array(val_data, dtype = float32)
val_label_array = np.array(val_label, dtype = float32)
train_lmdb_size = train_data_array.nbytes * 10
val_lmdb_size = val_data_array.nbytes * 10
env = lmdb.open('train_lmdb', map_size=train_lmdb_size)
with env.begin(write=True) as txn:
for i in range(train_num):
datum = caffe.proto.caffe_pb2.Datum()
datum.channels = 1
datum.height = 28
datum.width = 28
datum.data = train_data_array[i].reshape(28, 28).tobytes() # or .tostring() if numpy < 1.9
datum.label = int(train_label_array[i])
str_id = '{:08}'.format(i)
# The encode is only essential in Python 3
txn.put(str_id.encode('ascii'), datum.SerializeToString())
env = lmdb.open('test_lmdb', map_size=train_lmdb_size)
with env.begin(write=True) as txn:
for i in range(val_num):
datum = caffe.proto.caffe_pb2.Datum()
datum.channels = 1
datum.height = 28
datum.width = 28
datum.data = val_data_array[i].reshape(28, 28).tobytes() # or .tostring() if numpy < 1.9
datum.label = int(val_label_array[i])
str_id = '{:08}'.format(i)
# The encode is only essential in Python 3
txn.put(str_id.encode('ascii'), datum.SerializeToString())
train_path = 'CNN_training.prototxt'
test_path = 'CNN_testing.prototxt'
train_lmdb_path = 'train_lmdb'
test_lmdb_path = 'test_lmdb'
solver_path = 'CNN_solver.prototxt'
def lenet(lmdb, batch_size):
# our version of LeNet: a series of linear and simple nonlinear transformations
n = caffe.NetSpec()
n.data, n.label = L.Data(batch_size=batch_size, backend=P.Data.LMDB, source=lmdb,
transform_param=dict(scale=1./255), ntop=2)
n.conv1 = L.Convolution(n.data, kernel_size=5, num_output=20, weight_filler=dict(type='xavier'))
n.pool1 = L.Pooling(n.conv1, kernel_size=2, stride=2, pool=P.Pooling.MAX)
n.conv2 = L.Convolution(n.pool1, kernel_size=5, num_output=50, weight_filler=dict(type='xavier'))
n.pool2 = L.Pooling(n.conv2, kernel_size=2, stride=2, pool=P.Pooling.MAX)
n.fc1 = L.InnerProduct(n.pool2, num_output=500, weight_filler=dict(type='xavier'))
n.relu1 = L.ReLU(n.fc1, in_place=True)
n.score = L.InnerProduct(n.relu1, num_output=10, weight_filler=dict(type='xavier'))
n.loss = L.SoftmaxWithLoss(n.score, n.label)
return n.to_proto()
with open(train_path, 'w') as f:
f.write(str(lenet(train_lmdb_path, 64)))
with open(test_path, 'w') as f:
f.write(str(lenet(test_lmdb_path, 100)))
s = caffe_pb2.SolverParameter()
s.random_seed = 0xCAFFE
s.train_net = train_path
s.test_net.append(test_path)
s.test_interval = 500
s.test_iter.append(100)
s.max_iter = 10000
s.type = 'Adam'
s.base_lr = 0.01
s.momentum = 0.75
s.weight_decay = 5e-1
s.lr_policy = 'inv'
s.gamma = 0.0001
s.power = 0.75
s.display = 1000
s.snapshot = 5000
s.snapshot_prefix = 'lin_lnet'
s.solver_mode = caffe_pb2.SolverParameter.CPU
with open(solver_path,'w') as f:
f.write(str(s))
solver = None
solver = caffe.get_solver(solver_path)
# result in solver.net['data'].data[0] are zeros
print solver.net['data'].data[0]
array([[[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0.]]], dtype=float32)
Try doing a net.forward(). You should be able to see your data if everything else is correct.
A simpler and safer way to write to LMDB is using caffe.io.array_to_datum as demonstrated here.
I have an empty 'numpy.ndarray' to update.
import numpy as np
my_grid = np.zeros((5, 5))
# stat
parse = "max","min","avg"
# create a dictionary for each element of parse
grid_stat = {}
for arg in parse:
grid_stat[arg] = my_grid
grid_stat
{'avg': array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]]),
'max': array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]]),
'min': array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])}
I wish to update with new value each grid in the dictionary (it will be part of a loop)
ex: on dy = 0, dx = 0, max= 100, min= 50, avg = 75
grid_stat
{'avg': array([[ 75., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]]),
'max': array([[ 100., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]]),
'min': array([[ 50., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])}
i tried an easy solution
grid_stat['avg'][0,0] = 100 but also for max and min the value updated is 100
grid_stat
{'avg': array([[ 100., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]]),
'max': array([[ 100., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]]),
'min': array([[ 100., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])}
As I suggested in the comments to the last question, you probably want to use
for arg in parse:
grid_stat[arg] = my_grid.copy()
instead of
for arg in parse:
grid_stat[arg] = my_grid
sets each value of grid_stat to the very same array, the one called my_grid. It doesn't make three separate arrays of the same shape and contents. You can confirm this by using id or is:
>>> id(my_grid)
4325774752
>>> id(grid_stat['max'])
4325774752
>>> id(grid_stat['avg'])
4325774752
>>> id(grid_stat['min'])
4325774752
>>> my_grid is grid_stat['max']
True
>>> grid_stat['max'] is grid_stat['avg']
True
etc.
Say I have a matrix:
from numpy import *
a = zeros(shape=(nRows,nColumns));
and I would like to fill in the first column with ones, when I try to do:
a[:][0] = ones(shape=(nRows,1))
I get:
ValueError: output operand requires a reduction, but reduction is not enabled
Why is it not working?
It should be as easy as:
a[:,0] = 1
broadcasting will handle the details.
>>> a = np.zeros((10,10))
>>> a
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
>>> a[:,0]=1
>>> a
array([[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])