Вход 0 несовместим со слоем flatten_15: ожидаемый min_ndim = 3, найденный ndim = 2 - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь обучить модель ANN на моем наборе звуковых данных, который имеет 320 строк и 50 столбцов, при выполнении этого кода:

Model= Sequential([ Flatten(), 
     Dense(16, input_shape=(1,50), activation= 'relu' ) , 

     Dense(32, activation= 'relu' ),
     Dense(2, activation='softmax' ) , 
     ])
Model.compile(Adam(lr=0.0001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Model.fit(S_T_S, T_L, validation_split=0.1, batch_size=20, epochs=20, shuffle='true', verbose=2)

Я получаю ошибку:

Вход 0 несовместим со слоем flatten_15: ожидаемый min_ndim = 3, найденный ndim = 2,

1 Ответ

0 голосов
/ 20 февраля 2019

Если набор данных имеет форму (N, C), где N - это число точек данных, а C - количество каналов для одной точки данных, аргумент input_shape первого уровня должен указывать только каналы.

model= Sequential([
     Dense(16, input_shape=(50,), activation= 'relu' ) , 

     Dense(32, activation= 'relu' ),
     Dense(2, activation='softmax' ) , 
     ])
model.compile(Adam(lr=0.0001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(S_T_S, T_L, validation_split=0.1, batch_size=20, epochs=20, shuffle='true', verbose=2)

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

model= Sequential([
     Dense(16, input_shape=(50,), activation= 'relu' ) , 

     Dense(32, activation= 'relu' ),
     Dense(1, activation='sigmoid' ) , 
     ])
model.compile(Adam(lr=0.0001), loss='sparse_binary_crossentropy', metrics=['accuracy'])
...