วิธีการใช้น้ำหนักที่ผ่านการฝึกอบรมล่วงหน้าสำหรับการฝึก Convolutional NN ในเทนเซอร์โฟลว์
ในการทดลองของฉันฉันต้องการในการฝึกอบรมความสับสน NN (CNN) กับ cifar10 บน imagenet ResNet50
และผมใช้ เนื่องจาก cifar10 เป็นชุดภาพขนาดResNet50
32x32x3 ในขณะที่ใช้ 224x224x3 imagenet
ต้องการทำเช่นนั้นผมจำเป็นต้องปรับขนาดภาพที่นำเข้าเพื่อให้รถไฟซีเอ็นเอ็นเมื่อ อย่างไรก็ตามฉันได้ติดตามความพยายามที่จะฝึกง่ายๆCNN
กับ Imagenet:
ความพยายามปัจจุบันของฉัน :
โปรดดูการใช้งานทั้งหมดของฉันในส่วนสำคัญนี้ :
base_model = ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = Conv2D(32, (3, 3))(base_model.output)
x = Activation('relu')(x)
x = MaxPooling2D(pool_size=(2,2))(x)
x = Flatten()(x)
x = Dense(256)(x)
x = Dense(10)(x)
x = Activation('softmax')(x)
outputs = x
model = models.Model(base_model.input, outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=50, epochs=3, verbose=1, validation_data=(X_test, y_test))
แต่ความพยายามนี้ทำให้ฉันResourceExhaustedError
; ฉันเกิดข้อผิดพลาดนี้มาก่อนและการเปลี่ยนแปลงbatch_size
ลบข้อผิดพลาดออก แต่ตอนนี้ฉันเปลี่ยนไปbatch_size
ให้น้อยที่สุดเท่าที่จะทำได้และยังคงจบลงด้วยข้อผิดพลาด ฉันสงสัยว่าวิธีการฝึก CNN เกี่ยวกับ Imagenet ด้านบนอาจไม่ถูกต้องหรือมีบางอย่างผิดปกติในความพยายามของฉัน
อัปเดต :
ฉันต้องการทำความเข้าใจเกี่ยวกับการใช้น้ำหนักที่ได้รับการฝึกฝนมาก่อน (เช่น ResNet50 บน Imagenet) เพื่อฝึก Convolutional NN ฉันไม่แน่ใจว่าจะทำสิ่งนี้ในเทนเซอร์โฟลว์ได้อย่างไร ใครสามารถให้แนวทางที่เป็นไปได้เพื่อให้ได้มาซึ่งสิ่งนี้? ขอบคุณ
ใครช่วยชี้ให้ฉันเห็นว่าเกิดอะไรขึ้นกับความพยายามของฉัน? อะไรคือวิธีที่ถูกต้องในการฝึกCNN
โมเดลล้ำสมัยด้วย cifar10 บน Imagenet ใครสามารถแบ่งปันความคิดที่เป็นไปได้หรือวิธีที่มีประสิทธิภาพในการทำเช่นนี้ในเทนเซอร์โฟลว์ได้หรือไม่? ความคิดใด ๆ ? ขอบคุณ!
คำตอบ
คุณอาจได้รับข้อผิดพลาดนี้เนื่องจากคุณพยายามจัดสรรหน่วยความจำ (RAM) ให้กับข้อมูลทั้งหมดพร้อมกัน สำหรับ starters, คุณอาจจะใช้numpy
arrat tensors
เพื่อเก็บภาพแล้วภาพเหล่านั้นจะถูกแปลงเป็น ดังนั้นคุณจึงมีหน่วยความจำ 2 เท่าก่อนที่จะสร้างอะไรก็ตาม ยิ่งไปกว่านั้นresnet
เป็นโมเดลที่หนักมากดังนั้นคุณจึงพยายามส่งข้อมูลทั้งหมดพร้อมกัน นั่นคือเหตุผลที่โมเดลนี้ใช้งานbatches
ได้ ลองสร้างเครื่องกำเนิดไฟฟ้าโดยใช้tf.data.Dataset
เอกสารประกอบหรือใช้keras.preprocessing.Image.ImageDataGenerator
คลาสที่ง่ายมาก ใช้งานง่ายมาก คุณสามารถบันทึกที่อยู่ของไฟล์ภาพของคุณในคอลัมน์ที่มีคอลัมน์อื่นที่เป็นตัวแทนของการเรียนและการใช้งานDatarame
.flow_from_directory
หรือคุณสามารถใช้flow_from_directory
ถ้าคุณมีภาพของคุณบันทึกไว้ในไดเร็กทอรี
ตรวจสอบเอกสาร