※現在、ブログ記事を移行中のため一部表示が崩れる場合がございます。
順次修正対応にあたっておりますので何卒ご了承いただけますよう、お願い致します。
# digitsデータの読み込み
from sklearn import datasets
digits = datasets.load_digits()
X = digits.data.astype(np.float32)
Y = digits.target.astype(np.int)
N = Y.size
Y2 = np.zeros(10 * N).reshape(N,10).astype(np.float32)
for i in range(N):
Y2[i,Y[i]] = 1.0
このデータを学習データとテストデータに分割する訳だが、データ数が150から1797に増加したので、2/3を学習データに、1/3をテストデータにしてみた。# 学習データ(xtrain,ytrain)とテストデータ(xtest,yans)に分ける
index = np.arange(N)
xtrain = X[index[index % 3 != 0],:]
ytrain = Y2[index[index % 3 != 0],:]
xtest = X[index[index % 3 == 0],:]
yans = Y[index[index % 3 == 0]]
次に、一番肝心なモデルについて変更する。# Define model
class DigitsChain(Chain):
def __init__(self):
super(DigitsChain, self).__init__(
l1=L.Linear(64,32), # 1-2層
l2=L.Linear(32,10), # 2-3層
)
def __call__(self,x,y):
return F.mean_squared_error(self.fwd(x), y)
def fwd(self,x):
h1 = F.sigmoid(self.l1(x))
h2 = self.l2(h1)
return h2
これでほぼ準備は出来たはずなので、走らせるのは次回にしよう。