14. コード1
# -*- coding: utf-8 -*-
import pandas as pd
import math
import numpy as np
from numpy.random import *
import matplotlib.pyplot as plt
from renom import *
seed(1)
# データの読み込み
data = pd.read_csv("data.csv")
# 数値データの正規化(最大値除算)と型変換
for i in data.columns:
if i != "id":
data[i] = data[i]/np.max(data[i])
train_data = np.array(data.iloc[:,1:]).astype('float32')
N = len(train_data)
# ひとつめのオートエンコーダ
model_sae1 = Sequential([
Dense(32),
Sigmoid(),
Dense(65),
])
optimizer1 = Adam()
batch = 1
epoch = 100
for i in range(epoch):
for j in range(N//batch):
train_batch=train_data[j*batch:(j+1)*batch]
with model_sae1.train():
z = model_sae1(train_batch)
loss = mean_squared_error(z, train_batch)
loss.grad().update(optimizer1)
if i%10 == 0:print("epoch %02d train_loss:%f"%(i,
loss))
# ひとつめのモデルから中間層を予測
sae1_train = model_sae1[1](model_sae1[0](train_data))
# ふたつめのオートエンコーダ
model_sae2 = Sequential([
Dense(3),
Sigmoid(),
Dense(32),
])
optimizer2 = Adam()
batch = 1
epoch = 100
for i in range(epoch):
for j in range(N//batch):
train_batch=sae1_train[j*batch:(j+1)*batch]
with model_sae2.train():
z = model_sae2(train_batch)
loss = mean_squared_error(z, train_batch)
loss.grad().update(optimizer2)
if i%10 == 0:print("epoch %02d train_loss:%f"%(i,
loss))