web-dev-qa-db-ja.com

ValueError: `Dense`への入力の最後の次元を定義する必要があります。 「なし」が見つかりました

私のモデルは次のように定義されています。

_def build(data):
    model = Sequential()
    model.add(Cropping2D(cropping=((79, 145), (50, 250)), input_shape= 
                                                                   (160,320,3)))
    model.add(Lambda(lambda x: x/127.5 - 1.0))

    model.add(Conv2D(24, (2, 2), padding='same'))
    model.add(ELU())
    model.add(Conv2D(36, (2, 2), padding='same'))
    model.add(ELU())
    model.add(Conv2D(48, (2, 2), padding='same'))
    model.add(ELU())

    # Add a flatten layer
    model.add(Flatten())
    model.summary()
    model.add(Dense(100))
    model.add(ELU())
    model.add(Dense(50))
    model.add(ELU())
    model.add(Dense(10))
    model.add(ELU())
    model.add(Dense(1))

    return model
_

このエラーの取得:

ValueError:Denseへの入力の最後の次元を定義する必要があります。 Noneが見つかりました。

model.summary()を実行すると、次の出力が得られました

_Layer (type)                 Output Shape              Param #   
=================================================================
cropping2d_15 (Cropping2D)   (None, 0, 20, 3)          0         
_________________________________________________________________
lambda_23 (Lambda)           (None, 0, 20, 3)          0         
_________________________________________________________________
conv2d_47 (Conv2D)           (None, 0, 20, 24)         312       
_________________________________________________________________
elu_43 (ELU)                 (None, 0, 20, 24)         0         
_________________________________________________________________
conv2d_48 (Conv2D)           (None, 0, 20, 36)         3492      
_________________________________________________________________
elu_44 (ELU)                 (None, 0, 20, 36)         0         
_________________________________________________________________
conv2d_49 (Conv2D)           (None, 0, 20, 48)         6960      
_________________________________________________________________
elu_45 (ELU)                 (None, 0, 20, 48)         0         
_________________________________________________________________
flatten_12 (Flatten)         (None, None)              0         
=================================================================
Total params: 10,764
Trainable params: 10,764
Non-trainable params: 0
_

私はPythonにかなり慣れていないので、どんな入力でも歓迎されます。

6

入力画像のトリミングが多すぎます。 cropping引数は 解釈 次のようになります。

2つのintの2つのタプルのタプルの場合:((top_crop、bottom_crop)、(left_crop、right_crop))として解釈されます

Kerasドキュメントの次の例を検討してください。

# Crop the input 2D images or feature maps
model = Sequential()
model.add(Cropping2D(cropping=((2, 2), (4, 4)),
                     input_shape=(28, 28, 3)))
# now model.output_shape == (None, 24, 20, 3)

コードでは、上から79ピクセル、下から145ピクセルをトリミングしていますが、画像の高さはわずか160ピクセルです。トリミングが少ないと、コードは正常に実行されます。例:

model.add(Cropping2D(cropping=((10, 10), (10, 10)), input_shape=(160,320,3)))
1
sdcbr