Ожидается, что Activation_920 будет иметь 4 измерения, но получит массив с формой (16353, 2). - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь обучить данные изображения с помощью построенной ниже модели.У меня всего 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

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