In [90]:
# -*-coding:utf-8-*-
import numpy as np
class ConvolutionNetwork:
"""
simple convolutional network
"""
def __init__(self, kernalSize=(1, 1), kernalShape=(3, 3), kernalStep=1):
self.__kernalSize = kernalSize
self.__kernalShape = kernalShape
self.__kernalStep = kernalStep
#self.__kernals = np.random.randn(kernalSize[0], kernalSize[1], kernalShape[0], kernalShape[1])
self.__kernals = np.array([[[[1,2,3],[4,5,6],[7,8,9]]]])
def __convolute(self, data):
dm, dn = data.shape
km, kn = self.__kernalShape
kernalMapShape = (dm - km) / self.__kernalStep + 1, (dn - kn) / self.__kernalStep + 1
kernalMaps = []
for k in range(self.__kernalSize[1]):
kernalGroup = self.__kernals[:, k]
# TODO: change np.sum to convoluteFunction such sum, mean etc.
kernalMap = sum([np.array([np.sum(data[i:i + km, j:j + kn] * kernal)
for i in range(0, dm - km + 1, self.__kernalStep)
for j in range(0, dn - kn + 1, self.__kernalStep)
]).reshape(kernalMapShape) for kernal in kernalGroup])
kernalMaps.append(kernalMap)
self.__kernalMaps = np.array(kernalMaps)
print self.__kernalMaps
def fit(self, data):
self.__convolute(data)
if __name__ == '__main__':
# data = np.random.rand(4, 4)
data = np.array([
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]
])
cnn = ConvolutionNetwork()
cnn.fit(data)
In [99]:
data = np.array([
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]
])
d1 = data[0:3,0:3]
d2 = data[0:3,1:4]
d3 = data[1:4,0:3]
d4 = data[1:4,1:4]
print d1
print d2
print d3
print d4
kernal = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
r1 = kernal*d1
print r1
print np.sum(r1)
In [19]:
data = np.random.randn(5,5)
print data[0:3,0:3]
In [100]:
data = [np.array([1,2,3]), np.array([4,5,6])]
sum(data)
Out[100]:
In [ ]: