Я хочу использовать модель для классификации восьми классов изображений.Я думаю, что использование сверточных слоев, прежде чем повторяющиеся слои могут работать для моей проблемы.Но существует проблема с использованием рекуррентных слоев сразу после сверточного или плотного слоя, которая приводит к появлению тензорного потока, приводящего к следующей ошибке.
Input 0 is incompatible with layer simple_rnn_1: expected ndim=3, found ndim=2
Я решаю эту проблему, используя функцию Tensorflow expand_dims()
, используя внутри лямбда-слоя.Кажется, все работает правильно, но я хочу убедиться, что моя модель работает правильно.Несмотря на просмотр соответствующей документации, я не мог понять, что expand_dims()
сделал, чтобы заставить модель работать.
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Dropout, Flatten, Dense, Lambda, SimpleRNN
from tensorflow import expand_dims
def create_model():
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(50, 50, 1), padding='same',
activation='relu'))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), padding='same', activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Lambda(lambda x: expand_dims(model.output, axis=-1)))
model.add(SimpleRNN(64, return_sequences=False))
model.add(Dense(units=8, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy',
metrics=['accuracy'])
return model
Я хочу интерпретировать вывод CNN как последовательную информацию, используя рекуррентные слои (LSTM, GRU, другие рекуррентные).модели).Я делаю правильно, используя лямбда-слой с expand_dims()
?