Skip to content

Instantly share code, notes, and snippets.

@joumyakun
Last active February 25, 2016 01:24
Show Gist options
  • Save joumyakun/ac8de526ab7905c944ab to your computer and use it in GitHub Desktop.
Save joumyakun/ac8de526ab7905c944ab to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
参考 http://hi-king.hatenablog.com/entry/2015/06/27/194630
クラスタリングの実験
"""
import numpy as np
import chainer as chnr
from chainer import optimizers
import chainer.functions as F
import matplotlib.pyplot as plt
class SmallClassificationModel(chnr.FunctionSet):
def __init__(self, dsize, lsize):
# dsize:入力ノード数, lsize:出力ノード数
super(SmallClassificationModel, self).__init__(
fc1 = F.Linear(dsize, dsize),
fc2 = F.Linear(dsize, lsize)
)
def _forward(self, x):
#二層以上かつシグモイド関数を使うところが革新的
h = F.sigmoid(self.fc1(x))
y = self.fc2(h)
return y
def train(self, x_data, y_data):
# データ, ラベルの入力
x = chnr.Variable(x_data.reshape(1, x_data.shape[0]).astype(np.float32), volatile=False)
y = chnr.Variable(y_data.astype(np.int32), volatile=False)
# ネットワークに入力した結果
h = self._forward(x)
# 結果の評価
optimizer.zero_grads()
error = F.softmax_cross_entropy(h, y)
error.backward()
optimizer.update()
return h.data.argmax(), error.data
datas_and_labels = [
[np.array([0,0]),np.array([0])],
[np.array([0,1]),np.array([1])],
[np.array([1,0]),np.array([1])],
[np.array([1,1]),np.array([0])],
]*10000
data_size,label_size = 2, 2
"""
datas_and_labels = [
[np.array([0,0,0]),np.array([0])],
[np.array([1,0,0]),np.array([1])],
[np.array([0,1,0]),np.array([0])],
[np.array([0,0,1]),np.array([1])],
[np.array([1,1,0]),np.array([0])],
[np.array([1,0,1]),np.array([1])],
[np.array([0,1,1]),np.array([0])],
[np.array([1,1,1]),np.array([1])],
]*1000
data_size,label_size = 3, 2
"""
"""
datas_and_labels = [
[np.array([0,0,0,0]),np.array([0])],
[np.array([1,0,0,0]),np.array([1])],
[np.array([0,1,0,0]),np.array([1])],
[np.array([0,0,1,0]),np.array([1])],
[np.array([0,0,0,1]),np.array([1])],
[np.array([1,1,0,0]),np.array([2])],
[np.array([1,0,1,0]),np.array([2])],
[np.array([1,0,0,1]),np.array([2])],
[np.array([0,1,1,0]),np.array([2])],
[np.array([0,1,0,1]),np.array([2])],
[np.array([0,0,1,1]),np.array([2])],
[np.array([1,1,1,0]),np.array([3])],
[np.array([1,1,0,1]),np.array([3])],
[np.array([1,0,1,1]),np.array([3])],
[np.array([0,1,1,1]),np.array([3])],
[np.array([1,1,1,1]),np.array([4])],
]*1000
data_size,label_size = 4, 5
"""
model = SmallClassificationModel(data_size, label_size)
optimizer = optimizers.MomentumSGD(lr=0.01, momentum=0.9)
optimizer.setup(model.collect_parameters())
errors = []
for epoch,(data, label) in enumerate(datas_and_labels):
p_class, error = model.train(data, label)
errors.append(error)
print("---epoch {}---".format(epoch))
print("source label: {l}, data: {d}".format(l=label[0], d=data))
print("predict label: {p}, error: {e}".format(p=p_class, e=error))
plt.plot(errors, "b-")
plt.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment