kerasでのLSTM実装時のエラーについて
解決したいこと
kerasでLSTMを実装していますが,下記のようなエラーが出てしまっています。
機械学習もkerasも初心者のため,ブラックボックスとなっているmodelの中身についてのエラーがよくわからないです。
「レイヤーmodel_2は1入力を期待しているが,7つの入力テンソルを受け取った」とエラーにありますが、モデルの内容を確認するmodel.summary()を使用してもmodel_2というものが見つからず,あまりよくわかりませんでした...
知っている方がいればよろしくお願いいたします。
また、プログラムは以下の質問の回答を参考にしました。
https://teratail.com/questions/bvu8a6iqi02wp4
発生している問題・エラー
ValueError: in user code:
ValueError: Layer model_2 expects 1 input(s), but it received 7 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(None, 130) dtype=float32>, <tf.Tensor 'IteratorGetNext:1' shape=(None, 130) dtype=float32>, <tf.Tensor 'IteratorGetNext:2' shape=(None, 130) dtype=float32>, <tf.Tensor 'IteratorGetNext:3' shape=(None, 130) dtype=float32>, <tf.Tensor 'IteratorGetNext:4' shape=(None, 130) dtype=float32>, <tf.Tensor 'IteratorGetNext:5' shape=(None, 130) dtype=float32>, <tf.Tensor 'IteratorGetNext:6' shape=(None, 130) dtype=float32>]
該当するソースコード
import os
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from matplotlib import pyplot as plt
import tensorflow as tf
from tensorflow.python.keras.layers import Conv1D, Reshape, LSTM, Dense, Input
from tensorflow.python.keras.models import Model
from tensorflow.keras.utils import plot_model
import pandas as pd
def make_dataset():
for i in range(1,20):
for j in range(13,21):
path="E:\\最強データ2_フレーム揃え\\喜び_13~20\\Actor_"+str(i)+"\\合体"+str(j)+".csv"
df=pd.read_csv(path,index_col=0,header=0)
df.pop("AU12_r")
yy=df["AU06_r"]
df.apply(lambda x: (x-x.min())/(x.max() - x.min()), axis=0)
yyy=yy.values.astype(float)
preprocessing.minmax_scale(yyy)
data = df.values.astype(float)
x.append(data)
y.append(yyy)
return x,y
x=list()
y=list()
x,y= make_dataset()
x_train, x_valid, y_train, y_valid = train_test_split(x, y, test_size = 8)
print("3次元リストの要素数: " + str(len(x)))
print("3次元リストの中にある2次元リストの要素数: " + str(len(x[1])))
print("3次元リストの中にあるリストの要素数: " + str(len(x[0][2])))
print("2次元リストの要素数: " + str(len(y)))
print("2次元リストの中にあるリストの要素数: " + str(len(y[2])))
#データの種類(160)*データの長さ(108)*説明変数(130)
inputs=Input(shape=(108,130))
x = Reshape((130, 108))(inputs)
x = LSTM(108, return_sequences = True)(x)
x = Reshape((108, 130))(x)
x = Conv1D(1, 3, padding = "same", activation = "linear")(x)
model = Model(inputs, x)
model.compile(
optimizer = "adam",
loss = "mse",
metrics = ["mae"]
)
print(model.summary())
plot_model(model)
model.fit(
x_train, y_train,
epochs = 64,
batch_size = 32,
validation_data = (x_valid, y_valid)
)
# 結果の確認
pred = model.predict(x_valid)
for i in range(10):
t = x_valid[i][:, 0]
plt.figure(figsize = (8, 4))
plt.plot(t, pred[i], label = "predict")
plt.plot(t, wave(t, *x_valid[i][0, 1:]), label = "grandtruth")
plt.ylim([0, 1])
plt.grid()
plt.legend()
plt.show()
#print("\n",model.summary())
0