0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ResNetモデルを用いた株式相場予想

Last updated at Posted at 2022-04-10

はじめに

深層強化学習モデルMuZeroを開発する前段階として、ResNetモデルの実装を行なった。

ソースコードはこちら

関連

使用データについて

トレンド傾向の掴みやすさから、yahoo financeからGSPCの日足を使用した。

訓練データの期間:2015/1/1 - 2017/6/30
テストデータの期間:2017/7/1 - 2021/1/1

以下ソースコード

時系列におけるCNN

一般的なCNN

 CNN(Convolutional Neural Networks)は、畳み込み層を含んだニューラルネットワークで、画像データから意味のあるデータを抽出し、画像認識などを行えるようにする。

cnn_info.png

畳み込み層・・・入力データから特徴量を抽出する層
プーリング層・・・入力データを圧縮する層
全結合層・・・全てのニューロンが繋がった層

時系列におけるCNN

 CNNは、時系列データに置いて、1次元の入力データを2次元の行列に変換することで、特徴量の抽出に用いる。1

cnn.png

ResNet2

一般にCNNは層を厚くすることで、複雑な特徴量を学習できるが、それに伴い性能が悪くなる。そこで、ResNet(Residual Network)では、CNNを多く重ね、ショートカットを作ることで、この問題を解決した。

Screen Shot 2022-04-10 at 16.36.29.png

上図は2より引用

モデル構築3

resnet-archi.png

上図は3より引用

muzero_model.png

class Brain:
    def __init__(self, loadmodel = False):
        self.filters = 64
        self.hidden_layers = 16
        self.obs_shape = (look_back, 1) # look_back=10
        self.nn_actions = 9
        self.kr = l2(0.0005)
        self.opt = Adam(learning_rate=0.0001, epsilon=0.001)
        self.units = 64

        if not loadmodel:
            self._main_network_layer()
        else:
            self._load()

    def _main_network_layer(self):
        x = input = Input(shape = self.obs_shape)
        arr = [[8, 5, 3, 1],[8, 5, 3, 1],[8, 5, 3]]
        filter = [self.filters, self.filters * 2, self.filters * 2]
        for a, f in zip(arr, filter):
            x = self._residual_layer(a, f)(x)

        print(x.shape) # (None, 10, 128)
        x = GlobalAveragePooling1D()(x) # (None, 128)
        x = Dense(1)(x) # (None, 1)

        model = Model(inputs = input, outputs= x)
        model.compile(loss = 'categorical_crossentropy', optimizer = self.opt, metrics=['accuracy'])
        self.model = model
        model.summary()

        dot_img_file = './resnet_model.png'
        tf.keras.utils.plot_model(model, to_file=dot_img_file, show_shapes=True)


    def _residual_layer(self, arr, filter):
        def f(input_block):
            x = input_block
            for a in arr:
                if a >=  5:
                    x = self._conv_layer(filter, a, True)(x)
                elif a == 3:
                    x = self._conv_layer(filter, a, False)(x)
                else:
                    if len(arr) == 3:
                        input_block = BatchNormalization()(input_block)
                    else:
                        input_block = self._conv_layer(filter,
                                                       a, False)(input_block)

            x = Add()([x, input_block])
            x = Activation('relu')(x)
            return x
        return f

    def _conv_layer(self, filters, kernel_size  = 1, join_act = True):
        def f(input_block):
            x = Conv1D(filters=filters, kernel_size=kernel_size,
                       padding="same")(input_block)
            x = BatchNormalization()(x)
            if join_act:
                x = Activation('relu')(x)
            return x
        return f

損失関数

Unknown.png

学習結果

Unknown-2.png

Unknown-3.png

  1. S. Chen and H. He. Stock Prediction Using Convolutional Neural Network. Materials Science and Engineering443. 2018

  2. Kaiming He, Xiangyu Zhang, Shaoqing Ren and Jian Sun. Deep Residual Learning for Image Recognition. In International Conference on Machine Learning. 2015. 2

  3. Hassan Ismail Fawaz, Germain Forestier, Jonathan Weber, Lhassane Idoumghar and Pierre-Alain Muller IRIMAS, Universite ́ Haute-Alsace, Mulhouse, France. Adversarial Attacks on Deep Neural Networks for Time Series Classification. In International Conference on Machine Learning. 2019. 2

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?