時系列を6つのクラスのうちの1つに分類するために、単純な畳み込みニューラルネットワークを構築しようとしています。互換性のない形状エラーのため、ネットワークのトレーニングに問題があります。
次のコードでn_feats = 1000
は、、n_classes = 6
。
Fs = 100
input_layer = Input(shape=(None, n_feats), name='input_layer')
conv_layer = Conv1D(filters=32, kernel_size=Fs*4, strides=int(Fs/2), padding='same', activation='relu', name='conv_net_coarse')(input_layer)
conv_layer = MaxPool1D(pool_size=4, name='c_maxp_1')(conv_layer)
conv_layer = Dropout(rate=0.5, name='c_dropo_1')(conv_layer)
output_layer = Dense(n_classes, name='output_layer')(conv_layer)
model = Model(input_layer, output_layer)
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
print(model.summary())
モデルの概要は次のとおりです。
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_layer (InputLayer) (None, None, 1000) 0
_________________________________________________________________
conv_net_coarse (Conv1D) (None, None, 32) 12800032
_________________________________________________________________
c_maxp_1 (MaxPooling1D) (None, None, 32) 0
_________________________________________________________________
c_dropo_1 (Dropout) (None, None, 32) 0
_________________________________________________________________
output_layer (Dense) (None, None, 6) 198
=================================================================
Total params: 12,800,230
Trainable params: 12,800,230
Non-trainable params: 0
_________________________________________________________________
None
を実行するとmodel.fit(X_train, Y_train)
、X_train
シェイプが(30000, 1, 1000)
あり、Y_train
シェイプがです(30000, 1, 6)
。互換性のないシェイプエラーが発生します。
InvalidArgumentError (see above for traceback): Incompatible shapes: [32,0,6] vs. [1,6,1]
[[Node: output_layer/add = Add[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/gpu:0"](output_layer/Reshape_2, output_layer/Reshape_3)]]
[[Node: metrics_1/acc/Mean/_197 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_637_metrics_1/acc/Mean", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
MaxPool1D
とDropout
レイヤーを削除すると、モデルは問題なくトレーニングされます。それらのレイヤーを正しく指定していませんか?
どんな助けでもいただければ幸いです!
つまり、問題は2つの事実にあります。
(number_of_examples, timesteps, features)
、フィーチャがタイムステップごとに記録されたものである必要があります。これは(number_of_examples, 1000, 1)
、時系列に1000のタイムステップと1つの機能があるため、データを次のように再形成する必要があることを意味します。Flatten
前に使用することをお勧めしますDropout
。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加