def test_dot(self): with self.assertRaises(ValueError): XM @ YM self.assertEqual(XV@YV, 0) self.assertEqual(XM@XV, LA.array([-100, -50])) self.assertEqual( XM.T()@YM, LA.array([[50, 50, 50], [20, 20, 20], [80, 80, 80]]))
def fgsm(self, x, t): d_t = LA.array([[1 if ti == i + 1 else 0 for i in range(23)] for ti in t]) h = -d_t + x h = h @ self.w3 h = h * F.drelu(h) h = h @ self.w2 h = h * F.drelu(h) d = h @ self.w1 return F.sign(d) * self.eps0
def load_params(): p = Path("../ml/param.txt") with p.open() as f: params = f.readlines() h = 256 c = 23 w1 = LA.array([list(map(float, param.split())) for param in params[:h]]) b1 = LA.array([list(map(float, params[h].split()))] * 154) w2 = LA.array( [list(map(float, param.split())) for param in params[h + 1:h * 2 + 1]]) b2 = LA.array([list(map(float, params[h * 2 + 1].split()))] * 154) w3 = LA.array([ list(map(float, param.split())) for param in params[h * 2 + 2:(h + 1) * 2 + c] ]) b3 = LA.array([list(map(float, params[(h + 1) * 2 + c].split()))] * 154) return w1, b1, w2, b2, w3, b3
def test_div(self): self.assertEqual(XV/2, LA.array([2.5, 0., -2.5])) self.assertEqual(XM/2, LA.array([[5, 10, 15], [20, 0, 25]]))
def test_multiply(self): self.assertEqual(XV*3, LA.array([15, 0, -15])) self.assertEqual(XM*3, LA.array([[30, 60, 90], [120, 0, 150]])) self.assertEqual(XM*YM, LA.array([[10, 20, 30], [40, 0, 50]]))
def test_sub(self): self.assertEqual(XV-5, LA.array([0, -5, -10])) self.assertEqual(XM-YM, LA.array([[9, 19, 29], [39, -1, 49]]))
def softmax(x): if x._is_vector(): y = LA.array([exp(xi) for xi in x]) return y / sum(y) y = [[exp(xij) for xij in xi] for xi in x] return LA.array([list(LA.array(yi) / sum(yi)) for yi in y])
def test_drelu(self): self.assertEqual(drelu(XV), LA.array([1, 0, 0])) self.assertEqual(drelu(XM), LA.array([[1, 0, 0], [1, 0, 0]]))
import unittest import core.linalg as LA from functions.activation.relu import relu, drelu XV = LA.array([2, 0, -1]) XM = LA.array([[1, 0, -1], [0.1, 0.0, -0.1]]) class TestReLU(unittest.TestCase): def test_relu(self): self.assertEqual(relu(XV), LA.array([2, 0, 0])) self.assertEqual(relu(XM), LA.array([[1, 0, 0], [0.1, 0, 0]])) def test_drelu(self): self.assertEqual(drelu(XV), LA.array([1, 0, 0])) self.assertEqual(drelu(XM), LA.array([[1, 0, 0], [1, 0, 0]]))
import unittest import core.linalg as LA from functions.math.sign import sign XV = LA.array([1, 0.1, 0, -0.1, -1]) XM = LA.array([[1, 0.1, 0], [-0.1, -1, 0]]) class TestSign(unittest.TestCase): def test_sign(self): self.assertEqual(sign(XV), LA.array([1, 1, 0, -1, -1])) self.assertEqual(sign(XM), LA.array([[1, 1, 0], [-1, -1, 0]]))
def baseline(self, x): eps = LA.array([[random.choice((-1, 1)) for i in range(1024)] for j in range(154)]) return eps * self.eps0
def drelu(x): if x._is_vector(): return LA.array([xi > 0 for xi in x]) return LA.array([[xij > 0 for xij in xi] for xi in x])
import unittest from math import exp, log import core.linalg as LA from functions.loss.cross_entropy import cross_entropy X = LA.array([[0.5, 0.3, 0.6]]) T = LA.array([2]) class TestCrossEntropy(unittest.TestCase): def test_cross_entropy(self): sum_exp = exp(X[0, 0]) + exp(X[0, 1]) + exp(X[0, 2]) entropy = -X[0, T[0] - 1] + log(sum_exp) self.assertEqual(cross_entropy(X, T)[0], entropy)
import unittest import core.linalg as LA from utils import load_params, accuracy Y = LA.array([i for i in range(23)]) T = LA.array([j + j % 2 for j in range(23)]) class TestUtils(unittest.TestCase): def test_load_params(self): w1, b1, w2, b2, w3, b3 = load_params() self.assertEqual(w1.shape, (256, 1024)) self.assertEqual(b1.shape, (154, 256)) self.assertEqual(w2.shape, (256, 256)) self.assertEqual(b2.shape, (154, 256)) self.assertEqual(w3.shape, (23, 256)) self.assertEqual(b3.shape, (154, 23)) def test_accuracy(self): self.assertEqual(accuracy(Y, T), 12 / 23)
import unittest import core.linalg as LA from functions.activation.softmax import softmax XV = LA.array([0.5, 0.7, 0.3]) XM = LA.array([[0.5, 0.7, 0.3], [0.2, 0.6, 0.8]]) # chainer.functions.softmaxより SV = LA.array([0.32893292, 0.40175958, 0.2693075]) SM = LA.array([[0.32893292, 0.40175958, 0.2693075], [0.23180647, 0.34581461, 0.42237892]]) EPS = 1e-5 class TestSoftmax(unittest.TestCase): def test_softmax(self): self.assertTrue(max(softmax(XV) - SV) < EPS) self.assertTrue(max(max(softmax(XM) - SM)) < EPS)
def test_transpose(self): self.assertEqual( XM.transpose(), LA.array([[10, 40], [20, 0], [30, 50]]))
import unittest import core.linalg as LA from functions.math.argmax import argmax X = LA.array([0.1, 0.4, 0.8, 0.3, 0.5]) class TestArgmax(unittest.TestCase): def test_argmax(self): self.assertEqual(argmax(X), 2)
def test_sign(self): self.assertEqual(sign(XV), LA.array([1, 1, 0, -1, -1])) self.assertEqual(sign(XM), LA.array([[1, 1, 0], [-1, -1, 0]]))
def test_relu(self): self.assertEqual(relu(XV), LA.array([2, 0, 0])) self.assertEqual(relu(XM), LA.array([[1, 0, 0], [0.1, 0, 0]]))
import unittest import core.linalg as LA XV = LA.array([5, 0, -5]) YV = LA.array([1., 1., 1.]) XM = LA.array([[10, 20, 30], [40, 0, 50]]) YM = LA.array([[1., 1., 1.], [1., 1., 1.]]) class TestArray(unittest.TestCase): def test_add(self): with self.assertRaises(ValueError): XV + YM self.assertEqual(XV+YV, LA.array([6., 1., -4.])) self.assertEqual(XM+YM, LA.array([[11., 21, 31.], [41., 1., 51]])) def test_sub(self): self.assertEqual(XV-5, LA.array([0, -5, -10])) self.assertEqual(XM-YM, LA.array([[9, 19, 29], [39, -1, 49]])) def test_multiply(self): self.assertEqual(XV*3, LA.array([15, 0, -15])) self.assertEqual(XM*3, LA.array([[30, 60, 90], [120, 0, 150]])) self.assertEqual(XM*YM, LA.array([[10, 20, 30], [40, 0, 50]])) def test_dot(self): with self.assertRaises(ValueError): XM @ YM self.assertEqual(XV@YV, 0)
def test_add(self): with self.assertRaises(ValueError): XV + YM self.assertEqual(XV+YV, LA.array([6., 1., -4.])) self.assertEqual(XM+YM, LA.array([[11., 21, 31.], [41., 1., 51]]))
def sign(x): if x._is_vector(): return LA.array([1 if xi > 0 else -1 if xi < 0 else 0 for xi in x]) return LA.array([[1 if xij > 0 else -1 if xij < 0 else 0 for xij in xi] for xi in x])