質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Python 3.x

    9365questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Keras

    439questions

オートエンコーダーで抽出したものを,新たな入力値としたい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 46

blackmk

score 9

現在,以下のようにオートエンコーダーで45→10の次元削減を行っております.

from keras.layers import Input, Dense
from keras.models import Model
import sklearn.model_selection
import sklearn.datasets
import numpy as np

X = np.loadtxt('D:/X_data.csv' , delimiter = ",")
Y = np.loadtxt('D:/Y_data.csv' , delimiter = ",")


X_train , X_test , Y_train , Y_test = sklearn.model_selection.train_test_split(X ,Y , test_size = 0.3)

X_train = X_train.astype('float32') / 255.
X_test = X_test.astype('float32') / 255.
X_train = X_train.reshape((len(X_train), np.prod(X_train.shape[1:])))
X_test = X_test.reshape((len(X_test), np.prod(X_test.shape[1:])))



encoding_dim = 10
input_img = Input(shape=(45,))

encoded = Dense(128, activation='relu')(input_img)
encoded = Dense(64, activation='relu')(encoded)
encoded = Dense(32, activation='relu')(encoded)

decoded = Dense(64, activation='relu')(encoded)
decoded = Dense(128, activation='relu')(decoded)
decoded = Dense(45, activation='sigmoid')(decoded)

autoencoder = Model(input=input_img, output=decoded)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
autoencoder.fit(X_train, X_train,
                nb_epoch=100,
                batch_size=16,
                shuffle=True,
                validation_data=(X_test, X_test))


ここで得られた重みを用いて,特徴量を入力値にできるようなネットワークを構築したいです.

使用するネットワークは以下のようになります

#Build the model

import keras
import numpy as np
import sklearn.model_selection
import sklearn.datasets

#Load X,Y data

X = np.loadtxt('D:/X_data.csv' , delimiter = ",")
Y = np.loadtxt('D:/Y_data.csv' , delimiter = ",")

X_train , X_test , Y_train , Y_test = sklearn.model_selection.train_test_split(X ,Y , test_size = 0.8)

#NORMlIZE

def normalizer(A):
    M = np.reshape(A , (len(A) , -1))
    M = M.astype('float32')
    max = M.max(axis = 0)
    min = M.min(axis = 0)
    return (M - min) / (max - min)

X_train = normalizer(X_train)
X_test = normalizer(X_test)

Y_train_logit = keras.utils.to_categorical(Y_train)
Y_test_logit = keras.utils.to_categorical(Y_test)

#check the shape of X,Y
print(X_train)
print(Y_train)
#model fitting

import keras
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense , Activation

#Model_Layers

m = tf.keras.models.Sequential([

    tf.keras.layers.Dense(units=64, input_dim=len(X_train[0]), activation=tf.nn.relu),
    tf.keras.layers.Dense(units=128, input_dim=len(X_train[0]), activation=tf.nn.relu),
    tf.keras.layers.Dense(units=64, input_dim=len(X_train[0]), activation=tf.nn.relu),

    tf.keras.layers.Dense(units=max(set(Y_train)) - min(set(Y_train)) + 1, activation=tf.nn.softmax)

])


m.compile(loss='sparse_categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])

#fittng,epochs
m.fit(X_train , Y_train ,epochs = 100)


下のコードの部分の学習では,層を深くすると過学習が起きてしまったので,オートエンコーダーで事前学習をしてから再度学習をさせようと考えた次第であります.
つまり,現在は45次元のデータで学習させていますが,オートエンコーダーで10次元まで特徴を圧縮して,それをもとに学習させたいと考えております.
どのように特徴量を読み込み,入力値とするのかを教えていただきたいです.よろしくお願いします.

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

同じタグがついた質問を見る

  • Python 3.x

    9365questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Keras

    439questions