Ifi6057w11
Allikas: Lambda
11. Nädal
Perceptron. Närvivõrgud. AIMA 18.6.3-18.7.4
Lineaarne klassifitseerija Pythonis.
Loenguslaidid: PDF
Harjutustund
bmp laadimine (paint.net 8-bit grayscale peal VIST töötab)
import struct
def load_bmp(fn):
with open(fn, "rb") as f:
header = f.read(54)
offset = header[10:14]
offs = struct.unpack("@L", offset)
f.read(offs[0]-54)
data = list(f.read(28*28))
inv_data = []
for i in range(27, -1, -1):
inv_data += data[i*28: (i+1)*28]
return inv_data
import learning
import random
def load_mnist_img(fn):
img_list = []
with open(fn, "rb") as f:
f.read(16)
chunk_size = 28*28
chunk = f.read(chunk_size)
while len(chunk) == chunk_size:
img_list.append([px/256 for px in (list(chunk))])
chunk = f.read(chunk_size)
return img_list
def load_mnist_label(fn):
label_list = []
with open(fn, "rb") as f:
f.read(8)
chunk = f.read(1)
while chunk:
label_list.append((list(chunk)))
chunk = f.read(1)
return label_list
train_img = load_mnist_img("aima-data\\MNIST\\train-images-idx3-ubyte")
print(len(train_img))
train_labels = load_mnist_label("aima-data\\MNIST\\train-labels-idx1-ubyte")
print(len(train_labels))
#print(train_labels[:20])
train_data = [pixels+classif
for pixels, classif
in zip(train_img, train_labels)]
train_ds = learning.DataSet(random.sample(train_data, 1000))
print("training...")
nn = learning.NeuralNetLearner(train_ds,
hidden_layer_sizes=[20],
epochs=10)
test_img = load_mnist_img("aima-data\\MNIST\\t10k-images-idx3-ubyte")
print(len(test_img))
test_labels = load_mnist_label("aima-data\\MNIST\\t10k-labels-idx1-ubyte")
print(len(test_labels))
test_data = [pixels+classif
for pixels, classif
in zip(test_img, test_labels)]
test_ds = learning.DataSet(random.sample(test_data, 100))
for i in range(5):
print("tegelikult", test_labels[i], "narvivork arvab", nn(test_img[i]))
print(learning.err_ratio(nn, test_ds))