ฉันกำลังพยายามทำซีเอ็นเอ็นเลยรุ่นสำหรับไบนารี(ภาษาเครื่อง)การแบ่งประเภทของคนที่ไม่ใช่รูปภาพวันที่. ของรุ่น/รหัสกำลังแล้วร่วมที่ดีมากผล(accuracies พสูง)แต่ฉันไม่สามารถเข้าใจ input_shape
พารามิเตอร์สำหรับ 1 เลเยอร์ของ Conv1D
.
รูปร่างของ X หรือข้อมูลเข้า(อยู่ที่นี่ x_train_df
)คือ(2000,28). มันมี 28 มีคุณสมบัติและ 2000 ตัวอย่าง และรูปร่างของ Y หรือป้ายต่างๆ(ที่นี่ y_train_df
)คือ(2000,1).
model = Sequential()
model.add(Conv1D(filters = 64, kernel_size = 3, activation = 'relu', input_shape = (x_train_df.shape[1], 1)))
model.add(Conv1D(filters = 64, kernel_size = 3, activation = 'relu'))
model.add(MaxPooling1D(pool_size = 2))
model.add(Flatten())
model.add(Dense(100, activation = 'relu'))
model.add(Dense(1, activation = 'sigmoid'))
optimzr = Adam(learning_rate=0.005)
model.compile(loss='binary_crossentropy', optimizer=optimzr, metrics=[[tf.keras.metrics.AUC(curve="ROC", name = 'auc')], [tf.keras.metrics.AUC(curve="PR", name = 'pr')]])
# running the fitting
model.fit(x_train_df, y_train_df, epochs = 2, batch_size = 32, validation_data = (x_val_df, y_val_df), verbose = 2)
ฉันต้องได้รับ input_shape
เป็(28,1)(ใช้อ้างอิงจาก นี้ถามคำถาม).
แต่ใน Conv1D เลเยอร์เอกสารคู่มือ มันถูกเขียนนั้น
ตอนที่ใช้นี่เลเยอร์เป็นคนแรกเลเยอร์อยู่เป็นนางแบบให้เป็น input_shape เถียงกัน(tuple ของ integers หรือไม่,e.g.(10,128)สำหรับ sequences ของ 10 vectors ของ 128 มิติ vectors.
สิ่งที่ฉันเข้าใจจากนี่คือมิติของ input_shape ควรจะเป็(2000,1)เป็นเหมือนที่ผม 2000 หนึ่งมิติ vectors. แต่ให้มันเป็ input_shape
แสดงข้อผิดพลาดเกิดขึ้นระหว่างเป็น
ValueError:ค่า 0 ของเลเยอร์"sequential_25"คือทำงานเข้ากันไม่ด้ เลเยอร์:คาดหวังว่ารูปร่าง=(ไม่มีใครปี 2000,1),เจอรูปร่าง=(ไม่,28)
ดังนั้นฉันขอถามคำถามคือสิ่งที่ควรจะเป็นคนที่ถูกต้อง input_shape
?
ValueError: logits and labels must have the same shape, received ((None, 1) vs (None, 2000)).
ดังนั้นฉันเปลี่ยนรูปร่างได้ลอกเลียนต้องเป็น(2000,28,1)สำหรับx_train_df
และ(2000,1,1)สำหรับy_train_df
ที่แสดง อยู่นี้ และมันได้ผล ฉันสับสนเกี่ยวกับเรื่องนี้ มันจะช่วยได้มากถ้าคุณสามารถอธิบายวิธีที่จะแก้ไขรหัสในคำถาม