kerasを使ってニューラルネットワークの学習を行っています。
当初DBから大きなデータを吐き出して、fitで学習していたのですが、大きくなりすぎたのでfit_generatorを使って小分けしたcsvを順次読み込ませるようにしました。
最初、Fitで実行していたときはコメントアウトしてあるFlatten()でうまく動いていたのですが、fit_generatorを使い始めたところ、
①元々fitの時に使っていたFlatten()では学習したモデルを読み込むときに下のようなerrorが出たため、
②Flatten(input_shape=(1, 22))に変えてみたところ、(52841, 22)のtraindataを読み込ませる際にmodel.fit_generatorで以下のwarningが出るようになってしまいました。
fitからfit_generatorに変えてaccuracyも落ちてしまったような気がします。
色々と間違っているような気もするのですが、そもそも、fit_generatorよりも新しいFITを使うようにwarningも出ますし、fit_generatorは避けるべきでしょうか?
<error>
ValueError: The last dimension of the inputs to Dense
should be defined. Found None
.
<warning>
WARNING:tensorflow:Model was constructed with shape (None, 1, 22) for input Tensor("flatten_input:0", shape=(None, 1, 22), dtype=float32), but it was called on an input with incompatible shape (None, None).
def generate_batches(files, batch_size): counter = 0 while True: fname = files[counter] counter = (counter + 1) % len(files) with open('./output/save_batches/' + fname, 'r', encoding="utf-8_sig") as csv_file: reader = csv.reader(csv_file, delimiter=",", quotechar='"') csv_data = [row for row in reader] train_data = np.asarray(csv_data) train_data = train_data[1:] [X_train, y_train] = np.hsplit(train_data, [-1]) [X_train, x_gavage] = np.hsplit(X_train, [-10]) X_train = X_train.astype(np.float64) y_train = y_train.astype(np.int) for cbatch in range(0, X_train.shape[0], batch_size): yield (X_train[cbatch:(cbatch + batch_size), :], y_train[cbatch:(cbatch + batch_size)]) model = keras.models.Sequential([ keras.layers.Flatten(input_shape=(1, 22)), #keras.layers.Flatten(), # fitで実行していたときはこれでうまく動いていた keras.layers.Dense(hidden_num, activation=hidden_acti), keras.layers.Dropout(0.2), keras.layers.Dense(out_layer, activation=out_acti) ]) gen = generate_batches(files=file_list, batch_size=batches) history = model.fit_generator(gen, steps_per_epoch=all_len/batches, epochs=epoch, verbose=1)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。