Ошибка при проверке цели: ожидается, что плотность_1 имеет 2 измерения, но получен массив с формой (1, 4000, 25) - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь обучить сеть LSTM выполнять двоичную классификацию без присмотра.

У меня есть матрица целых чисел в качестве входных данных, каждая строка - это отдельная трасса и каждый столбец - это особенность.

Это модель, которую я использовал:

time_steps = 4000
features = 25
model = Sequential()
model.add(LSTM(128, input_shape=(time_steps, features), name='lstm'))
model.add(Dense(1, activation='relu'))
model.summary()
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, x_train, batch_size=batch_size, epochs=epochs, verbose=2)

И это ошибка, которую я получаю:

Ошибка при проверке цели: ожидается, что плотность_1 имеет 2 измерения, но получена массив с формой (1, 4000, 25)

Генерируется при попытке запуска model.fit

Вход формируется следующим образом:

x_train = np.array([input_array[:4000]])

Каждая трасса входа имеет 25 функций.

Я новичок в этой области и не могу понять, как решить проблему. Я проверил похожие тикеты, но ни один из них не помог мне.

Вот некоторые из тикетов, которые я проанализировал:

Ошибка при проверке цели: ожидалось, что dens_1 имеет 3 измерения, но получил массив с формой (118, 1)

ValueError: Ошибка при проверке цели: ожидается, что плотность_1 имеет 2 измерения, но получен массив с формой (68, 50, 50, 50, 1)

Ошибка при проверке цели: ожидается, что плотность_2 имеет 2 измерения, но получен массив с формой (1, 1226, 2)

ValueError: Ошибка при проверке цели: ожидается, что плотность_2 будет иметь 3 измерения, но получен массив с формой (10000, 1)

Ответы [ 2 ]

1 голос
/ 10 января 2020

Пара замечаний:

  • x_train задается как вход для слоя LSTM, который ожидает 3D-ввода. Первое измерение - это выборки, второе - временные шаги, а окончательное измерение - элементы.
  • Когда вы вызываете fit, вы дважды передаете x_train, что означает, что вы хотите, чтобы цель была такой же, как входные данные. Это имеет смысл, если вы пытаетесь сделать авто-кодировщик, однако он не может работать на этой архитектуре. Выходной сигнал плотного слоя будет одним значением, он никак не может соответствовать форме входного сигнала (который является 3D). Ниже я добавил y_train, чтобы ваша модель вместо этого предсказывала одно значение.
time_steps = 40
features = 25
x_train = np.random.normal(size=(10, time_steps, features))
y_train =  np.random.normal(size=(10, ))
model = Sequential()
model.add(LSTM(128, input_shape=(time_steps, features), name='lstm'))
model.add(Dense(1, activation='relu'))
model.summary()
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=2, verbose=2)

Удачи!

0 голосов
/ 10 января 2020

Вы не показали форму input_array, но вы можете попробовать изменить ее с помощью np.reshape(input_array, (4000, 25)). Подробнее об изменении формы здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...