前提・実現したいこと
pythonのlstmを用いて異常検知をしようとしています。
lstmのmodel.fitの機能を実装中に以下のエラーメッセージが発生しました。
X_train(行数が300,列数(次元数)が1042の特徴量)を用いて学習させ,X_testに違う値が入った(行数が300,列数(次元数)が1042)の特徴量を利用しようと考えています。最終的に距離を用いてannomary scoreを出したいです。
LSTM初心者のため色々困惑しながらソースを書いています。
何卒よろしくお願いします。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "lstm_tokutyou.py", line 108, in <module> callbacks=[early_stopping]) File "//anaconda3/lib/python3.7/site-packages/keras/engine/training.py", line 952, in fit batch_size=batch_size) File "//anaconda3/lib/python3.7/site-packages/keras/engine/training.py", line 789, in _standardize_user_data exception_prefix='target') File "//anaconda3/lib/python3.7/site-packages/keras/engine/training_utils.py", line 128, in standardize_input_data 'with shape ' + str(data_shape)) ValueError: Error when checking target: expected activation_1 to have 2 dimensions, but got array with shape (300, 1042, 1)
該当のソースコード
python
1#coding:utf-8 2import csv 3import re 4import datetime 5import time 6import numpy as np 7import matplotlib.pyplot as plt 8from keras.models import Sequential 9from keras.layers.core import Dense, Activation 10from keras.layers.recurrent import LSTM 11from keras.layers.wrappers import Bidirectional 12from keras.optimizers import Adam 13from keras.callbacks import EarlyStopping 14from sklearn import datasets 15from sklearn.model_selection import train_test_split 16from sklearn.utils import shuffle 17from sklearn.utils import shuffle 18from keras import initializers 19from sklearn import preprocessing 20def show_graph(day, data, label, color="b"): 21 pylab.figure(figsize=(14, 8)) 22 pylab.subplot(211) 23 pylab.xlabel('time') 24 pylab.ylabel('score') 25 pylab.plot(day, data, color=color, label=label) 26 pylab.legend(loc='upper right') 27 pylab.show() 28data = np.loadtxt("tokutyou1.csv",delimiter=",") 29print(len(data[0])) #1042 30X = data[:,:1042] 31ss = preprocessing.StandardScaler() 32X = preprocessing.scale(X) 33X_train_number = np.arange(300) 34X_train = X[:300] 35X_valid = X[300:400] 36X_test = X[400:700] 37print(len(X_train))#300 38print(len(X_valid))#100 39print(len(X_test)) #300 40X_train = X_train.reshape(-1, 1042, 1) 41X_valid = X_valid.reshape(-1, 1042, 1) 42X_test = X_test.reshape(-1, 1042, 1) 43del X 44 45 46n_in = 1 47n_long = 1042 48n_hidden = 128 49n_out = 1042 50 51 52#def weight_variable(shape, name=None): 53 #return np.random.normal(scale=.01, size=shape) 54 55 56early_stopping = EarlyStopping(monitor='val_loss', patience=10, verbose=1) 57 58model = Sequential() 59model.add(Bidirectional(LSTM(n_hidden), 60 input_shape=(n_long,n_in))) 61model.add(Dense(n_out, kernel_initializer=initializers.random_normal())) 62model.add(Activation('softmax')) 63 64model.compile(loss='categorical_crossentropy', 65 optimizer=Adam(lr=0.001, beta_1=0.9, beta_2=0.999), 66 metrics=['accuracy']) 67 68''' 69モデル学習 70''' 71epochs = 30 72batch_size = 100 73 74hist = model.fit(X_train, X_train, 75 batch_size=batch_size, 76 epochs=epochs, 77 validation_data=(X_valid, X_valid), 78 callbacks=[early_stopping]) 79 80''' 81学習の進み具合を可視化 82''' 83print(hist.history) 84acc = hist.history['val_accuracy'] 85loss = hist.history['val_loss'] 86 87plt.rc('font', family='serif') 88fig = plt.figure() 89plt.plot(range(len(loss)), loss, 90 label='loss', color='black') 91plt.plot(range(len(acc)), acc, 92 label='acc', color='black') 93plt.xlabel('epochs') 94plt.show() 95 96del X_train 97 98preds = model.predict(X_train) 99 100 101 102def calculate_mse(value, predict_value, variance=1.0): 103 value = value[:, 0, 0] 104 print('value') 105 print(value) 106 predict_value = predict_value[:, 0, 0] 107 print('predict_value') 108 print(predict_value) 109 mse_value = [(v - p_v)**2 / variance for v, p_v in zip(value, predict_value)] 110 return np.array(mse_value) 111 112mse_value = mse_value = calculate_mse(X_train, preds, mse_value_variance) 113show_graph(X_train_number, mse_value, 'Anomaly Score train', color="r")
試したこと
ValueError:ターゲットのチェック中にエラーが発生しました:activation_1は2次元であると予想されましたが、形状(300、1042、1)の配列を取得しました
日本語訳するとこうなるのですが、なぜ2次元で予測されているのかわからないです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/07 04:35
2019/10/07 04:47 編集
2019/10/07 05:00
2019/10/07 05:10
2019/10/07 05:15
2019/10/07 05:32
2019/10/07 05:42
2019/10/07 05:47
2019/10/07 05:58
2019/10/07 06:09
2019/10/07 06:31
2019/10/07 08:02