Я пытаюсь обучить данные изображения с помощью построенной ниже модели.У меня всего 16353 изображения, а форма 224x224x1.Я пытаюсь заставить эту модель работать.Но сталкиваются с некоторыми проблемами с вводом или размерами.
Я попытался изменить форму на [Нет, 1], но это не сработало
#dense and softmax done
def add_output_layer(layer):
from keras.layers.core import Dense, Activation
from keras.layers.wrappers import TimeDistributed
layer = TimeDistributed(Dense(2))(layer) # 2 categories
return Activation('softmax')(layer)
#batch and relu
def _bn_relu(layer):
from keras.layers import BatchNormalization
from keras.layers import Activation
layer = BatchNormalization()(layer)
layer = Activation('relu')(layer)
# if dropout > 0:
from keras.layers import Dropout
layer = Dropout(0.2)(layer)
return layer
def add_conv_weight(
layer, subsample_length=1):
from keras.layers import Conv1D
layer = Conv2D(
filters=32,
kernel_size=(16),
strides=subsample_length,
padding='same',
kernel_initializer='he_normal',
input_shape = (224,224,1))(layer)
return layer
def resnet_block(
layer,
subsample_length,
block_index):
from keras.layers import Add
from keras.layers import MaxPooling1D
from keras.layers.core import Lambda
shortcut = MaxPooling2D(pool_size=subsample_length)(layer)
for i in range(2):
if not (block_index == 0 and i == 0):
layer = _bn_relu(
layer)
layer = add_conv_weight(
layer,
subsample_length if i == 0 else 1)
layer = Add()([shortcut, layer])
return layer
#start here
input_img = keras.Input(shape = (224,224,1))
#First block
layer = add_conv_weight(input_img)
layer = _bn_relu(layer)
#Second block #Third block
for index, subsample_length in enumerate([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]):
layer = resnet_block(
layer,
subsample_length,
index)
layer = _bn_relu(layer)
#Forth block
from keras.layers import Add
layer = _bn_relu(layer)
#layer = Add()(Flatten())
out = add_output_layer(layer)
model = keras.Model(inputs=[input_img], outputs=[out])
from keras.optimizers import Adam
optimizer = Adam(
lr=0.001,
clipnorm=1)
model.compile(loss='categorical_crossentropy',
optimizer=optimizer,
metrics=['accuracy'])
ожидал, что активация_920 будет иметь 4 измерения, но получил массив с формой (16353, 2).Раньше у меня были conv1D и maxpool1D.Изменено на 2D