แชท | สถานะการสร้าง Windows | สถานะการสร้าง Linux |
---|---|---|
Microsoft Cognitive Toolkit (https://cntk.ai) เป็นชุดเครื่องมือการเรียนรู้เชิงลึกแบบครบวงจรที่อธิบายโครงข่ายประสาทเทียมเป็นชุดขั้นตอนการคำนวณผ่านกราฟกำกับ ในกราฟกำกับนี้ โหนดปลายสุดแสดงถึงค่าอินพุตหรือพารามิเตอร์เครือข่าย ในขณะที่โหนดอื่นๆ แสดงถึงการดำเนินการของเมทริกซ์ตามอินพุต CNTK ช่วยให้ผู้ใช้รับรู้และรวมประเภทโมเดลยอดนิยม เช่น feed-forward DNN, Convolutional nets (CNN) และเครือข่ายที่เกิดซ้ำ (RNNs/LSTM) ได้อย่างง่ายดาย ใช้การเรียนรู้แบบ Stochastic Gradient Descent (SGD, Error Backpropagation) พร้อมการสร้างความแตกต่างอัตโนมัติและการทำงานแบบขนานใน GPU และเซิร์ฟเวอร์หลายตัว CNTK เปิดให้บริการภายใต้ใบอนุญาตโอเพ่นซอร์สตั้งแต่เดือนเมษายน 2558 เราหวังว่าชุมชนจะใช้ประโยชน์จาก CNTK เพื่อแบ่งปันแนวคิดได้รวดเร็วยิ่งขึ้นผ่านการแลกเปลี่ยนรหัสการทำงานของโอเพ่นซอร์ส
หากคุณต้องการใช้บิต CNTK ล่าสุดจากต้นแบบ ให้ใช้แพ็คเกจ CNTK ทุกคืน:
คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการใช้และการมีส่วนร่วมกับ CNTK ได้จากแหล่งข้อมูลต่อไปนี้:
เรียนชุมชน
ด้วยการสนับสนุนอย่างต่อเนื่องของเราใน ONNX และ ONNX Runtime เราได้ทำให้การทำงานร่วมกันภายในระบบนิเวศเฟรมเวิร์ก AI ง่ายขึ้น และเข้าถึงความสามารถในการอนุมานประสิทธิภาพสูงข้ามแพลตฟอร์มสำหรับทั้งโมเดล ML แบบดั้งเดิมและโครงข่ายประสาทเทียมเชิงลึก ในช่วงไม่กี่ปีที่ผ่านมา เราได้รับสิทธิพิเศษในการพัฒนาโครงการการเรียนรู้ของเครื่องแบบโอเพ่นซอร์สที่สำคัญ ซึ่งรวมถึง Microsoft Cognitive Toolkit ซึ่งช่วยให้ผู้ใช้สามารถใช้ประโยชน์จากความก้าวหน้าทั่วทั้งอุตสาหกรรมในการเรียนรู้เชิงลึกในวงกว้าง
การเปิดตัว 2.7 ในวันนี้จะเป็นการเปิดตัวหลักครั้งสุดท้ายของ CNTK เราอาจมีการเปิดตัวการแก้ไขข้อบกพร่องเล็กๆ น้อยๆ ตามมาในภายหลัง แต่สิ่งเหล่านี้จะได้รับการประเมินเป็นรายกรณีไป ไม่มีแผนสำหรับการพัฒนาฟีเจอร์ใหม่หลังการเปิดตัวครั้งนี้
CNTK 2.7 รองรับ ONNX 1.4.1 เต็มรูปแบบ และเราสนับสนุนให้ผู้ที่ต้องการใช้งานโมเดล CNTK ของตนเพื่อใช้ประโยชน์จาก ONNX และ ONNX Runtime ในอนาคต ผู้ใช้สามารถใช้ประโยชน์จากนวัตกรรม ONNX ที่พัฒนาอย่างต่อเนื่องผ่านเฟรมเวิร์กจำนวนมากที่รองรับ ตัวอย่างเช่น ผู้ใช้สามารถส่งออกโมเดล ONNX จาก PyTorch หรือแปลงโมเดล TensorFlow เป็น ONNX ด้วยตัวแปลง TensorFlow-ONNX
เรารู้สึกขอบคุณอย่างยิ่งสำหรับการสนับสนุนทั้งหมดที่เราได้รับจากผู้มีส่วนร่วมและผู้ใช้ตลอดหลายปีที่ผ่านมานับตั้งแต่ CNTK เปิดตัวโอเพ่นซอร์สครั้งแรก CNTK ช่วยให้ทั้งทีม Microsoft และผู้ใช้ภายนอกสามารถดำเนินการปริมาณงานที่ซับซ้อนและขนาดใหญ่ในแอปพลิเคชันการเรียนรู้เชิงลึกทุกประเภท เช่น ความก้าวหน้าทางประวัติศาสตร์ในการรู้จำเสียงที่ประสบความสำเร็จโดยนักวิจัย Microsoft Speech ซึ่งเป็นผู้สร้างเฟรมเวิร์ก
เนื่องจาก ONNX มีการใช้ ONNX มากขึ้นในการให้บริการโมเดลต่างๆ ที่ใช้ในผลิตภัณฑ์ของ Microsoft เช่น Bing และ Office เราจึงทุ่มเทในการสังเคราะห์นวัตกรรมจากการวิจัยด้วยความต้องการการผลิตที่เข้มงวดเพื่อพัฒนาระบบนิเวศไปข้างหน้า
เหนือสิ่งอื่นใด เป้าหมายของเราคือการสร้างนวัตกรรมในการเรียนรู้เชิงลึกทั่วทั้งซอฟต์แวร์และฮาร์ดแวร์ให้เปิดกว้างและเข้าถึงได้มากที่สุดเท่าที่จะเป็นไปได้ เราจะทำงานอย่างหนักเพื่อนำทั้งจุดแข็งที่มีอยู่ของ CNTK และการวิจัยที่ล้ำสมัยใหม่มาสู่โครงการโอเพ่นซอร์สอื่น ๆ เพื่อขยายการเข้าถึงเทคโนโลยีดังกล่าวอย่างแท้จริง
ด้วยความขอบคุณ
-- ทีมงาน CNTK
โครงการนี้ได้นำหลักจรรยาบรรณของ Microsoft Open Source มาใช้ สำหรับข้อมูลเพิ่มเติม โปรดดูคำถามที่พบบ่อยเกี่ยวกับจรรยาบรรณหรือติดต่อ [email protected] หากมีคำถามหรือความคิดเห็นเพิ่มเติม
คุณสามารถค้นหาข่าวสารเพิ่มเติมเกี่ยวกับฟีดโครงการอย่างเป็นทางการ
2019-03-29. CNTK2.7.0
วิธีตั้งค่าสภาพแวดล้อมบิลด์และรันไทม์บน Windows:
หากต้องการตั้งค่าสภาพแวดล้อมบิลด์และรันไทม์บน Linux โดยใช้นักเทียบท่า โปรดสร้างอิมเมจนักเทียบท่า Unbuntu 16.04 โดยใช้ Dockerfiles ที่นี่ สำหรับระบบ Linux อื่นๆ โปรดดูที่ Dockerfiles เพื่อตั้งค่าไลบรารีที่ต้องพึ่งพาสำหรับ CNTK
โมเดล CNTK ที่มีลูปแบบเรียกซ้ำสามารถส่งออกไปยังโมเดล ONNX ที่มีตัวเลือกการสแกน
หากต้องการส่งออกโมเดลที่มีขนาดใหญ่กว่า 2GB ในรูปแบบ ONNX ให้ใช้ cntk.Function API: save(self, filename, format=ModelFormat.CNTKv2, use_external_files_to_store_parameters=False) โดยตั้งค่า 'format' เป็น ModelFormat.ONNX และ use_external_files_to_store_parameters ตั้งค่าเป็น True ในกรณีนี้ พารามิเตอร์โมเดลจะถูกบันทึกในไฟล์ภายนอก โมเดลที่ส่งออกจะต้องใช้กับไฟล์พารามิเตอร์ภายนอกเมื่อทำการประเมินโมเดลด้วย onnxruntime
26-11-2018.
ขณะนี้ Netron รองรับการแสดงภาพไฟล์ CNTK v1 และ CNTK v2 .model
แล้ว
2018-09-17. CNTK 2.6.0
การดำเนินการของกลุ่ม Convolution ใน CNTK ได้รับการอัปเดตแล้ว การใช้งานที่อัปเดตจะย้ายออกจากการสร้างกราฟย่อยสำหรับการบิดกลุ่ม (โดยใช้การแบ่งส่วนและการแยกส่วน) และใช้ API ของ cuDNN7 และ MKL2017 โดยตรงแทน สิ่งนี้จะช่วยปรับปรุงประสบการณ์ทั้งในแง่ของประสิทธิภาพและขนาดโมเดล
เป็นตัวอย่าง สำหรับการโน้มน้าวใจกลุ่มเดียว op ด้วยคุณลักษณะต่อไปนี้:
หมายเลขการเปรียบเทียบสำหรับโหนดเดียวนี้มีดังนี้:
ส่วนหัวแรก | ผู้บริหาร GPU เวลา (เป็นมิลลิวินาที เฉลี่ย 1,000 รอบ) | ผู้บริหารซีพียู เวลา (เป็นมิลลิวินาที เฉลี่ย 1,000 รอบ) | ขนาดโมเดล (ในรูปแบบ KB, CNTK) |
---|---|---|---|
การใช้งานแบบเก่า | 9.349 | 41.921 | 38 |
การใช้งานใหม่ | 6.581 | 9.963 | 5 |
เร่งความเร็ว/ประหยัดประมาณ | ประมาณ 30% | ประมาณ 65-75% | 87% |
การดำเนินการของการบิดตามลำดับใน CNTK ได้รับการอัปเดตแล้ว การใช้งานที่อัปเดตจะสร้างเลเยอร์การบิดตามลำดับแยกต่างหาก แตกต่างจากเลเยอร์การบิดปกติ การดำเนินการนี้จะหมุนบนแกนไดนามิก (ลำดับ) เช่นกัน และใช้ filter_shape[0] กับแกนนั้น การใช้งานที่อัปเดตรองรับกรณีที่กว้างขึ้น เช่น โดยที่ก้าว > 1 สำหรับแกนลำดับ
ตัวอย่างเช่น การสลับภาพขาวดำเป็นชุดตามลำดับ รูปภาพมีความสูงคงที่เท่ากันที่ 640 แต่แต่ละภาพมีความกว้างและความยาวผันแปรได้ ความกว้างจะแสดงด้วยแกนตามลำดับ เปิดใช้งานการเสริม และก้าวสำหรับทั้งความกว้างและความสูงคือ 2
>>> f = SequentialConvolution((3,3), reduction_rank=0, pad=True, strides=(2,2), activation=C.relu)
>>> x = C.input_variable(**Sequence[Tensor[640]])
>>> x.shape
(640,)
>>> h = f(x)
>>> h.shape
(320,)
>>> f.W.shape
(1, 1, 3, 3)
มีการเปลี่ยนแปลงที่สำคัญในตัวดำเนินการ deep_to_space และ space_to_deep สิ่งเหล่านี้ได้รับการอัปเดตเพื่อให้ตรงกับข้อกำหนดของ ONNX โดยเฉพาะการเรียงสับเปลี่ยนวิธีการวางมิติความลึกเป็นบล็อกในมิติเชิงพื้นที่ และในทางกลับกัน มีการเปลี่ยนแปลง โปรดดูตัวอย่างเอกสารที่อัปเดตสำหรับการดำเนินการทั้งสองนี้เพื่อดูการเปลี่ยนแปลง
เพิ่มการสนับสนุนสำหรับปฏิบัติการตรีโกณมิติ Tan
และ Atan
เพิ่มการรองรับแอตทริบิวต์ alpha
ใน ELU op
อัปเดตอัลกอริธึมการขยายอัตโนมัติของ Convolution
เพื่อสร้างการขยายแบบสมมาตรด้วยความพยายามสูงสุดบน CPU โดยไม่กระทบต่อค่าเอาท์พุต Convolution สุดท้าย การอัปเดตนี้จะเพิ่มช่วงของกรณีที่อาจครอบคลุมโดย MKL API และปรับปรุงประสิทธิภาพ เช่น ResNet50
มีการเปลี่ยนแปลงครั้งใหญ่ในคุณสมบัติ อาร์กิวเมนต์ ใน CNTK python API พฤติกรรมเริ่มต้นได้รับการอัปเดตเพื่อส่งคืนอาร์กิวเมนต์ตามลำดับหลามแทนที่จะเป็นลำดับ C++ วิธีนี้จะส่งกลับอาร์กิวเมนต์ในลำดับเดียวกับที่ป้อนเข้าสู่ ops หากคุณยังคงต้องการรับอาร์กิวเมนต์ตามลำดับ C++ คุณสามารถแทนที่ตัวเลือกส่วนกลางได้ การเปลี่ยนแปลงนี้ควรส่งผลต่อการดำเนินการต่อไปนี้เท่านั้น: Times, TransposeTimes และ Gemm(ภายใน)
LogSoftMax
เพื่อใช้งานที่เสถียรยิ่งขึ้นBatchNormalization
ของ CNTK ในการส่งออก/นำเข้าเป็นข้อมูลจำเพาะล่าสุดDepthToSpace
และ SpaceToDepth
เพื่อให้ตรงกับข้อกำหนด ONNX เกี่ยวกับการเรียงสับเปลี่ยนสำหรับวิธีวางมิติความลึกเป็นมิติบล็อกalpha
ใน ELU
ONNX opConvolution
และ Pooling
ไม่เหมือนเมื่อก่อน ops เหล่านี้จะไม่ส่งออก Pad
op ที่ชัดเจนในทุกสถานการณ์ConvolutionTranspose
รองรับแอตทริบิวต์เช่น output_shape
, output_padding
และ pads
อย่างสมบูรณ์StopGradient
ของ CNTK แบบไม่ต้องดำเนินการHardmax
/ Softmax
/ LogSoftmax
Select
op ExportMatMul
opGemm
opMeanVarianceNormalization
ของ CNTK op ส่งออก/นำเข้าเป็นข้อมูลจำเพาะล่าสุดLayerNormalization
ของ CNTK op ส่งออก/นำเข้าเป็นข้อมูลจำเพาะล่าสุดPRelu
op ของ CNTK ส่งออก/นำเข้าเป็นข้อมูลจำเพาะล่าสุดGather
op การส่งออก / นำเข้าเป็นข้อมูลจำเพาะล่าสุดImageScaler
ของ CNTK op ส่งออก / นำเข้าเป็นข้อมูลจำเพาะล่าสุดReduce
การส่งออก/นำเข้า ops เป็นข้อมูลจำเพาะล่าสุดFlatten
op ของ CNTK ส่งออก/นำเข้าเป็นข้อมูลจำเพาะล่าสุดUnsqueeze
opsize
มีความหมายเป็นเส้นผ่านศูนย์กลาง ไม่ใช่รัศมี เพิ่มการตรวจสอบหากขนาดเคอร์เนล LRN ใหญ่กว่าขนาดช่องMin
/ Max
เพื่อจัดการอินพุตที่หลากหลายไลบรารี Cntk.Core.Managed ได้รับการแปลงอย่างเป็นทางการเป็น .Net Standard และรองรับแอปพลิเคชัน .Net Core และ .Net Framework บนทั้ง Windows และ Linux ตั้งแต่รุ่นนี้เป็นต้นไป นักพัฒนา .Net ควรจะสามารถกู้คืนแพ็คเกจ CNTK Nuget ได้โดยใช้ไฟล์โปรเจ็กต์สไตล์ .Net SDK ใหม่ โดยมีรูปแบบการจัดการแพ็คเกจที่ตั้งค่าเป็น PackageReference
รหัส C# ต่อไปนี้ใช้งานได้ทั้งบน Windows และ Linux:
>>> var weightParameterName = "weight";
>>> var biasParameterName = "bias";
>>> var inputName = "input";
>>> var outputDim = 2;
>>> var inputDim = 3;
>>> Variable inputVariable = Variable.InputVariable(new int[] { inputDim }, DataType.Float, inputName);
>>> var weightParameter = new Parameter(new int[] { outputDim, inputDim }, DataType.Float, 1, device, weightParameterName);
>>> var biasParameter = new Parameter(new int[] { outputDim }, DataType.Float, 0, device, biasParameterName);
>>>
>>> Function modelFunc = CNTKLib.Times(weightParameter, inputVariable) + biasParameter;
ตัวอย่างเช่น เพียงเพิ่ม ItemGroup clause ในไฟล์ .csproj ของแอปพลิเคชัน .Net Core ก็เพียงพอแล้ว: >>> >>> >>> >>> netcoreapp2.1 >>> x64 >>> >>> >>> >>> >>> >>> >>>
2018-04-16. CNTK2.5.1
บรรจุ CNTK 2.5 ใหม่โดยมีไลบรารีของบุคคลที่สามรวมอยู่ในชุดรวม (แพ็คเกจ Python wheel)
15-03-2018. ซีเอ็นทีเค 2.5
เปลี่ยนรูปแบบเอาต์พุตรายละเอียด Profiler ให้เป็น chrome://tracing
เปิดใช้งานการกำหนดเวลาต่อโหนด ตัวอย่างการทำงานที่นี่
import cntk as C
C . debugging . debug . set_node_timing ( True )
C . debugging . start_profiler () # optional
C . debugging . enable_profiler () # optional
#<trainer|evaluator|function> executions
< trainer | evaluator | function > . print_node_timing ()
C . debugging . stop_profiler ()
ตัวอย่างรายละเอียดโปรไฟล์โปรไฟล์ใน chrome://tracing
การปรับปรุงประสิทธิภาพการอนุมาน CPU โดยใช้ MKL
cntk.cntk_py.enable_cpueval_optimization()/cntk.cntk_py.disable_cpueval_optimization()
1BitSGD รวมอยู่ใน CNTK
1BitSGD
พร้อมใช้งานแล้วด้วยใบอนุญาต CNTK (ใบอนุญาต MIT) ภายใต้ Source/1BitSGD/
1bitsgd
ถูกรวมเข้ากับเป้าหมาย GPU ที่มีอยู่ฟังก์ชันการสูญเสียใหม่: softmax แบบลำดับชั้น
การฝึกอบรมแบบกระจายกับผู้เรียนหลายคน
ผู้ประกอบการ
MeanVarianceNormalization
แก้ไขข้อบกพร่อง
CNTKBinaryFormat
deserializer เมื่อข้ามขอบเขตการกวาดmpi=no
cntk.convert
API ใน misc.converter.py
ซึ่งป้องกันการแปลงเครือข่ายที่ซับซ้อนส.ส
ONNX.checker
แล้วOptimizedRNNStack
ของ CNTK (LSTM เท่านั้น)MeanVarianceNormalization
แบบทดลองIdentity
แบบทดลองLayerNormalization
ของ CNTK โดยใช้ ONNX MeanVarianceNormalization
opConcat
ของ CNTKLeakyReLu
(อาร์กิวเมนต์ 'alpha' เปลี่ยนกลับเป็นประเภท double)เบ็ดเตล็ด
find_by_uid()
ภายใต้ cntk.logging.graph
2018-02-28. CNTK รองรับการสร้างทุกคืน
หากคุณต้องการใช้บิต CNTK ล่าสุดจากต้นแบบ ให้ใช้แพ็คเกจ CNTK ทุกคืน
หรือคุณสามารถคลิกป้ายบิลด์ที่เกี่ยวข้องเพื่อเข้าสู่หน้าบิลด์ทุกคืน
2018-01-31. ซีเอ็นทีเค 2.4
ไฮไลท์:
OP
top_k
: ในการส่งต่อจะคำนวณค่า k บนสุด (ใหญ่ที่สุด) และดัชนีที่สอดคล้องกันตามแกนที่ระบุ ในการย้อนกลับ การไล่ระดับสีจะกระจายไปยังองค์ประกอบ k ด้านบน (องค์ประกอบที่ไม่อยู่ด้านบน k จะมีการไล่ระดับสีเป็นศูนย์)gather
รองรับอาร์กิวเมนต์แกนแล้วsqueeze
และ expand_dims
เพื่อการถอดและเพิ่มแกนซิงเกิลตันได้อย่างง่ายดายzeros_like
และ ones_like
ในหลาย ๆ สถานการณ์ คุณสามารถพึ่งพา CNTK ได้อย่างถูกต้องในการออกอากาศค่า 0 หรือ 1 แบบธรรมดา แต่บางครั้งคุณก็ต้องใช้เทนเซอร์จริงdepth_to_space
: จัดเรียงองค์ประกอบใหม่ในเทนเซอร์อินพุตจากมิติความลึกเป็นบล็อกเชิงพื้นที่ การใช้งานโดยทั่วไปของการดำเนินการนี้มีไว้สำหรับการใช้การบิดพิกเซลย่อยสำหรับโมเดลที่มีความละเอียดสูงพิเศษบางภาพspace_to_depth
: จัดเรียงองค์ประกอบใหม่ในเทนเซอร์อินพุตจากมิติเชิงพื้นที่เป็นมิติเชิงลึก ส่วนใหญ่จะเป็นสิ่งที่ตรงกันข้ามกับ DepthToSpacesum
: สร้างอินสแตนซ์ฟังก์ชันใหม่ที่คำนวณผลรวมของเทนเซอร์อินพุตตามองค์ประกอบsoftsign
: สร้างอินสแตนซ์ฟังก์ชันใหม่ที่คำนวณ softsign ที่ชาญฉลาดองค์ประกอบของเทนเซอร์อินพุตasinh
: สร้างอินสแตนซ์ฟังก์ชันใหม่ที่คำนวณ asinh ที่เป็นองค์ประกอบของเทนเซอร์อินพุตlog_softmax
: สร้างอินสแตนซ์ฟังก์ชันใหม่ที่คำนวณค่า logsoftmax ที่ทำให้เป็นมาตรฐานของเทนเซอร์อินพุตhard_sigmoid
: สร้างอินสแตนซ์ฟังก์ชันใหม่ที่คำนวณค่า hard_sigmoid ที่ทำให้เป็นมาตรฐานของเทนเซอร์อินพุตelement_and
, element_not
, element_or
, element_xor
การดำเนินการลอจิกตามองค์ประกอบreduce_l1
: คำนวณบรรทัดฐาน L1 ขององค์ประกอบของเทนเซอร์อินพุตตามแนวแกนที่ให้มาreduce_l2
: คำนวณบรรทัดฐาน L2 ขององค์ประกอบของเทนเซอร์อินพุตตามแนวแกนที่ให้มาreduce_sum_square
: คำนวณผลรวมกำลังสองขององค์ประกอบของเทนเซอร์อินพุตตามแกนที่ให้ไว้image_scaler
: การเปลี่ยนแปลงรูปภาพโดยปรับขนาดค่าแต่ละค่าส.ส
Reshape
op เพื่อจัดการ InferredDimension
producer_name
และ producer_version
ให้กับโมเดล ONNXauto_pad
หรือ pads
โทรดใน ONNX Conv
opPooling
op serializationInputVariable
ด้วยแกนแบตช์เดียวเท่านั้นTranspose
op เพื่อให้ตรงกับข้อมูลจำเพาะที่อัปเดตConv
, ConvTranspose
และ Pooling
ops เพื่อให้ตรงกับข้อกำหนดที่อัปเดตผู้ประกอบการ
Convolution
op จะเปลี่ยนสำหรับกลุ่ม > 1 คาดว่าจะมีการใช้งานการบิดกลุ่มที่ได้รับการปรับปรุงให้เหมาะสมยิ่งขึ้นในรุ่นถัดไปConvolution
การบิดแบบไบนารีของเฮไลด์
Cntk.BinaryConvolution.so/dll
ที่สามารถใช้กับโมดูล netopt
ได้ ไลบรารีประกอบด้วยตัวดำเนินการ Convolution แบบไบนารีที่ได้รับการปรับปรุงซึ่งทำงานได้ดีกว่าตัวดำเนินการ Convolution แบบไบนารีที่ใช้ Python หากต้องการเปิดใช้งาน Halide ในบิลด์ โปรดดาวน์โหลด Halide release และตั้งค่าตัวแปรสภาพแวดล้อม HALIDE_PATH
ก่อนที่จะเริ่มบิลด์ ใน Linux คุณสามารถใช้ ./configure --with-halide[=directory]
เพื่อเปิดใช้งานได้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้คุณสมบัตินี้ โปรดดูที่ How_to_use_network_optimizationดูเพิ่มเติมในบันทึกประจำรุ่น รับการเผยแพร่จากหน้าการเผยแพร่ CNTK