首页 > 解决方案 > fit_generator 期望所有神经网络层的输入?

问题描述

对 Keras 很陌生,并构建了一个具有两个密集层的神经网络。内存中要保存的数据太多,所以我使用 fit_generator 函数,但得到错误ValueError: No data provided for "dense_2". Need data for each key in: ['dense_2']。下面的小例子:

from keras.models import Sequential
from keras.layers import Dense
import numpy as np

model = Sequential([
    Dense(100, input_shape=(1924800,), activation='relu'),
    Dense(1, activation='sigmoid')
])

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])

def generate_arrays_from_files(path, batch_size=50):
    while True:
        # Do things....
        yield ({'dense_1_input': np.asarray(outdata)}, {'output': np.asarray(outlabels)})

model.fit_generator(generate_arrays_from_files(path), steps_per_epoch=5, epochs=10)

编辑:忘记编译行

标签: pythonkeras

解决方案


您不需要在输入中指定层,而且您显然不需要将数据传递到第二个密集层。请注意,最好使用 Keras 生成器,您可以像这样创建自定义生成器或使用标准生成器。

您还需要编译模型。

from keras.models import Sequential
from keras.layers import Dense
import numpy as np

model = Sequential([
    Dense(100, input_shape=(1924800,), activation='relu'),
    Dense(1, activation='sigmoid')
])

optimizer = keras.optimizers.Adam(lr=1e-3)
model.compile(loss='binary_crossentropy',
              optimizer=optimizer,
              metrics=['accuracy'])

def generate_arrays_from_files(path, batch_size=50):
    while True:
        # Do things....
        yield np.asarray(outdata), np.asarray(outlabels)

model.fit_generator(generate_arrays_from_files(path), steps_per_epoch=5, epochs=10)

顺便给模型输入一个向量是否正常(1924800,)


推荐阅读