(http://www.nu.nl/wetenschap/4064944/kraaien-hebben-vermogen-tellen.html)
Als machine learning enig respect wil houden zal het dat toch minsten moeten kunnen evenaren!
De handschoen opgepakt! Ook hier gaat het weer vooral om 'datamanipulatie'. Hoe maak je een dataset met veel afbeeldingen van 'graantjes'? Dat lijkt nu gelukt! Ongetwijfeld niet op de mooiste manier (in numpy / python moet je for-loopjes kunnen vermijden) maar toch: Tellen (tot 3) lijkt alvast te lukken:
Hierbij weer de code:
import matplotlib.pyplot as plt
from sklearn import svm
import numpy as np
# Kraaien kunnen tellen. Dat blijkt uit een experiment http://www.nu.nl/wetenschap/4064944/kraaien-hebben-vermogen-tellen.html
# Toch eens kijken of dat een DL programma dat ook kan.
si = 1000
h = 28
b = 28
r = 4
ima = np.zeros((si, h * b))
ima.shape = si, h , b
grains = np.floor(np.random.rand(si) * 4)
for i in range(0,si):
for j in range(0,int(grains[i])):
ho = np.floor(np.random.rand() * (h-r))
br = np.floor(np.random.rand() * (b-r))
for x in range(int(ho),int(ho+r)):
for y in range(int(br),int(br+r)):
ima[i,x,y] = 1
clf = svm.SVC(gamma=0.0001, C=100)
ima.shape = si, h * b
x,y = ima, grains
clf.fit(x[:-10],y[:-10])
#print ('Prediction:', clf.predict(im[t]))
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid
def fillim(c):
im = ima[c]
im.shape = h,b
return im
fig = plt.figure(1, (10., 10.))
grid = ImageGrid(fig, 111, # similar to subplot(111)
nrows_ncols = (2, 5), # creates 2x2 grid of axes
axes_pad=0.5, # pad between axes in inch.
)
for c in range(10):
grid[c].imshow(fillim((si - 10) + c),cmap=plt.cm.gray)
title = 'Predict: ' + str(clf.predict(ima[(si - 10) + c]))
grid[c].set_title(title, weight='light', size='small', position=(0.5, 1.1),
horizontalalignment='center', verticalalignment='center')
plt.show()
Geen opmerkingen:
Een reactie posten