C++ template metaprogramming in practice: a deep learning framework
Gespeichert in:
1. Verfasser: | |
---|---|
Format: | Elektronisch E-Book |
Sprache: | English |
Veröffentlicht: |
Boca Raton ; London ; New York
CRC Press
2020
|
Ausgabe: | First edition |
Schriftenreihe: | An Auerbach book
|
Schlagworte: | |
Online-Zugang: | TUM01 |
Beschreibung: | Description based on publisher supplied metadata and other sources |
Beschreibung: | 1 Online-Ressource Illustrationen |
ISBN: | 9781000219739 9781003102311 |
Internformat
MARC
LEADER | 00000nmm a2200000zc 4500 | ||
---|---|---|---|
001 | BV047442064 | ||
003 | DE-604 | ||
005 | 20240216 | ||
007 | cr|uuu---uuuuu | ||
008 | 210827s2020 |||| o||u| ||||||eng d | ||
020 | |a 9781000219739 |9 978-1-00-021973-9 | ||
020 | |a 9781003102311 |9 978-1-003-10231-1 | ||
035 | |a (ZDB-30-PQE)EBC6369331 | ||
035 | |a (ZDB-30-PAD)EBC6369331 | ||
035 | |a (ZDB-89-EBL)EBL6369331 | ||
035 | |a (OCoLC)1231605860 | ||
035 | |a (DE-599)BVBBV047442064 | ||
040 | |a DE-604 |b ger |e rda | ||
041 | 0 | |a eng | |
049 | |a DE-91 | ||
082 | 0 | |a 005.13/3 | |
084 | |a DAT 708 |2 stub | ||
084 | |a DAT 358 |2 stub | ||
100 | 1 | |a Wei, Li |e Verfasser |4 aut | |
245 | 1 | 0 | |a C++ template metaprogramming in practice |b a deep learning framework |c by Li Wei |
250 | |a First edition | ||
264 | 1 | |a Boca Raton ; London ; New York |b CRC Press |c 2020 | |
264 | 4 | |c © 2021 | |
300 | |a 1 Online-Ressource |b Illustrationen | ||
336 | |b txt |2 rdacontent | ||
337 | |b c |2 rdamedia | ||
338 | |b cr |2 rdacarrier | ||
490 | 0 | |a An Auerbach book | |
500 | |a Description based on publisher supplied metadata and other sources | ||
505 | 8 | |a Cover -- Half Title -- Title Page -- Copyright Page -- Contents -- Preface -- Acknowledgment -- PART I: INTRODUCTION -- 1. Basic Tips -- 1.1. Metafunction and type_traits -- 1.1.1. Introduction to Metafunctions -- 1.1.2. Type Metafunction -- 1.1.3. Various Metafunctions -- 1.1.4. type_traits -- 1.1.5. Metafunctions and Macros -- 1.1.6. The Nominating Method of Metafunctions in This Book -- 1.2. Template Template Parameters and Container Templates -- 1.2.1. Templates as the Input of Metafunctions -- 1.2.2. Templates as the Output of Metafunctions -- 1.2.3. Container Templates -- 1.3. Writing of Sequences, Branches, and Looping Codes -- 1.3.1. Codes Executed in Sequence Order -- 1.3.2. Codes Executed in Branches -- 1.3.2.1. Implementing Branches Using std::conditional and std::conditional_t -- 1.3.2.2. Implementing Branches with (Partial) Specialization -- 1.3.2.3. Implementing Branches Using std::enable_if and std::enable_if_t -- 1.3.2.4. Compile-time Branches with Different Return Types -- 1.3.2.5. Simplify Codes with if constexpr -- 1.3.3. Codes Executed in Loops -- 1.3.4. Caution: Instantiation Explosion and Compilation Crash -- 1.3.5. Branch Selection and Short Circuit Logic -- 1.4. Curiously Recurring Template Pattern (CRTP) -- 1.5. Summary -- 1.6. Exercises -- 2. Heterogeneous Dictionaries and Policy Templates -- 2.1. Introduction to Named Arguments -- 2.2. Heterogeneous Dictionaries -- 2.2.1. How to Use the Module -- 2.2.2. The Representation of the Keys -- 2.2.3. Implementation of Heterogeneous Dictionaries -- 2.2.3.1. External Framework -- 2.2.3.2. Implementation of the Function Create -- 2.2.3.3. The Main Frame of Values -- 2.2.3.4. Logic Analysis of NewTupleType -- 2.2.4. A Brief Analysis of VarTypeDicts Performance -- 2.2.5. std::tuple as the Cache -- 2.3. Policy Templates -- 2.3.1. Introduction to Policies -- 2.3.1.1. Policy Objects | |
505 | 8 | |a 2.3.1.2. Policy Object Templates -- 2.3.2. Defining Policies and Policy Objects (Templates) -- 2.3.2.1. Policy Grouping -- 2.3.2.2. Declarations of Macros and Policy Objects (Templates) -- 2.3.3. Using Policies -- 2.3.4. Background Knowledge: Dominance and Virtual Inheritance -- 2.3.5. Policy Objects and Policy Dominance Structures -- 2.3.6. Policy Selection Metafunction -- 2.3.6.1. Main Frame -- 2.3.6.2. The Metafunction MinorCheck_ -- 2.3.6.3. Construct the Final Return Type -- 2.3.7. Simplifying Declarations of Policy Objects with Macros -- 2.4. Summary -- 2.5. Exercises -- PART II: THE DEEP LEARNING FRAMEWORK -- 3. A Brief Introduction to Deep Learning -- 3.1. Introduction to Deep Learning -- 3.1.1. From Machine Learning to Deep Learning -- 3.1.2. A Wide Variety of Artificial Neural Networks -- 3.1.2.1. Artificial Neural Networks and Matrix Operations -- 3.1.2.2. Deep Neural Network -- 3.1.2.3. Recurrent Neural Networks -- 3.1.2.4. Convolutional Neural Networks -- 3.1.2.5. Components of Neural Networks -- 3.1.3. Organization and Training of Deep Learning Systems -- 3.1.3.1. Network Structure and Loss Function -- 3.1.3.2. Model Training -- 3.1.3.3. Predictions with Models -- 3.2. The Framework Achieved in This BookMetaNN -- 3.2.1. From Computing Tools of Matrices to Deep Learning Frameworks -- 3.2.2. Introduction to MetaNN -- 3.2.3. What We Will Discuss -- 3.2.3.1. Data Representation -- 3.2.3.2. Matrix Operations -- 3.2.3.3. Layers and Automatic Derivation -- 3.2.3.4. Evaluation and Performance Optimization -- 3.2.4. Topics Not Covered in This Book -- 3.3. Summary -- 4. Type System and Basic Data Types -- 4.1. The Type System -- 4.1.1. Introduction to the Type System -- 4.1.2. Classification Systems of Iterators -- 4.1.3. Use Tags as Template Parameters -- 4.1.4. The Type System of MetaNN -- 4.1.5. Metafunctions Related to the Type System | |
505 | 8 | |a 4.1.5.1. Metafunction IsXXX -- 4.1.5.2. Metafunction DataCategory -- 4.2. Design Concepts -- 4.2.1. Support for Different Computing Devices and Computing Units -- 4.2.2. Allocation and Maintenance of Storage Space -- 4.2.2.1. Class Template Allocator -- 4.2.2.2. Class Template ContinuousMemory -- 4.2.3. Shallow Copy and Detection of Write Operations -- 4.2.3.1. Data Types without Requirements of Support for Element level Reading and Writing -- 4.2.3.2. Element-level Writing and Shallow Copy -- 4.2.4. Expansion of Underlying Interfaces -- 4.2.5. Type Conversion and Evaluation -- 4.2.6. Data Interface Specifications -- 4.3. Scalars -- 4.3.1. Declaration of Class Templates -- 4.3.2. A Specialized Version Based on CPU -- 4.3.2.1. Type Definitions and Data Members -- 4.3.2.2. Construction, Assignment, and Movement -- 4.3.2.3. Reading and Writing Elements -- 4.3.2.4. Evaluating Related Interfaces -- 4.3.3. The Principal Type of Scalars -- 4.4. Matrix -- 4.4.1. Class Template Matrix -- 4.4.1.1. Declarations and Interfaces -- 4.4.1.2. Dimensional Information and Element-level Reading and Writing -- 4.4.1.3. Submatrix -- 4.4.1.4. Underlying Access Interfaces of Matrix -- 4.4.2. Special Matrices: Trivial Matrix, Zero Matrix, and One-hot Vector -- 4.4.2.1. Trivial Matrix -- 4.4.2.2. Zero Matrix -- 4.4.2.3. One-hot Vector -- 4.4.3. Introducing a New Matrix Class -- 4.5. List -- 4.5.1. Template Batch -- 4.5.2. Template Array -- 4.5.2.1. Introduction of the Template Array -- 4.5.2.2. Class Template ArrayImp -- 4.5.2.3. Metafunction IsIterator -- 4.5.2.4. Construction of Array Objects -- 4.5.3. Duplication and Template Duplicate -- 4.5.3.1. Introduction of the Template Duplicate -- 4.5.3.2. Class Template DuplicateImp -- 4.5.3.3. Construction of the Duplicate Object -- 4.6. Summary -- 4.7. Exercises -- 5. Operations and Expression Templates | |
505 | 8 | |a 5.1. Introduction to Expression Templates -- 5.2. The Design Principles of Operation Templates in MetaNN -- 5.2.1. Problems of the Operation Template Add -- 5.2.2. Behavior Analysis of Operation Templates -- 5.2.2.1. Validation and Derivation of Types -- 5.2.2.2. Division of Object Interfaces -- 5.2.2.3. Auxiliary Class Templates -- 5.3. Classification of Operations -- 5.4. Auxiliary Templates -- 5.4.1. The Auxiliary Class Template OperElementType_/OperDeviceType_ -- 5.4.2. The Auxiliary Class Template OperXXX_ -- 5.4.3. The Auxiliary Class Template OperCateCal -- 5.4.4. The Auxiliary Class Template OperOrganizer -- 5.4.4.1. Specialization for Scalars -- 5.4.4.2. Specialization for Lists of Scalars -- 5.4.4.3. Other Specialized Versions -- 5.4.5. The Auxiliary Class Template OperSeq -- 5.5. Framework for Operation Templates -- 5.5.1. Category Tags for Operation Templates -- 5.5.2. Definition of UnaryOp -- 5.6. Examples of Operation Implementations -- 5.6.1. Sigmoid Operation -- 5.6.1.1. Function Interface -- 5.6.1.2. Template OperSigmoid_ -- 5.6.1.3. User Calls -- 5.6.2. Operation Add -- 5.6.2.1. Function Interface -- 5.6.2.2. The Implementation Framework of OperAdd_ -- 5.6.2.3. The Implementation of OperAdd_::Eval -- 5.6.3. Operation Transpose -- 5.6.4. Operation Collapse -- 5.7. The List of Operations Supported by MetaNN -- 5.7.1. Unary Operations -- 5.7.2. Binary Operations -- 5.7.3. Ternary Operations -- 5.8. The Trade-off and Limitations of Operations -- 5.8.1. The Trade-off of Operations -- 5.8.2. Limitations of Operations -- 5.9. Summary -- 5.10. Exercises -- 6. Basic Layers -- 6.1. Design Principles of Layers -- 6.1.1. Introduction to Layers -- 6.1.2. Construction of Layer Objects -- 6.1.2.1. Information Delivered through Constructors -- 6.1.2.2. Information Specified through Template Parameters | |
505 | 8 | |a 6.1.3. Initialization and Loading of Parameter Matrices -- 6.1.4. Forward Propagation -- 6.1.5. Preservation of Intermediate Results -- 6.1.6. Backward Propagation -- 6.1.7. Update of Parameter Matrices -- 6.1.8. Acquisition of Parameter Matrices -- 6.1.9. Neutral Detection of Layers -- 6.2. Auxiliary Logic for Layers -- 6.2.1. Initializing the Module -- 6.2.1.1. Using the Initialization Module -- 6.2.1.2. MakeInitializer -- 6.2.1.3. Class Template ParamInitializer -- 6.2.1.4. Class Template Initializer -- 6.2.2. Class Template DynamicData -- 6.2.2.1. Base Class Template DynamicCategory -- 6.2.2.2. Derived Class Template DynamicWrapper -- 6.2.2.3. Encapsulating Behaviors of Pointers with DynamicData -- 6.2.2.4. Category Tags -- 6.2.2.5. Auxiliary Functions and Auxiliary Meta Functions -- 6.2.2.6. DynamicData and Dynamic Type System -- 6.2.3. Common Policy Objects for Layers -- 6.2.3.1. Parameters Relevant to Update and Backward Propagation -- 6.2.3.2. Parameters Relevant to Input -- 6.2.3.3. Parameters Relevant to Operations -- 6.2.4. Metafunction InjectPolicy -- 6.2.5. Universal I/O Structure -- 6.2.6. Universal Operation Functions -- 6.3. Specific Implementations of Layers -- 6.3.1. AddLayer -- 6.3.2. ElementMulLayer -- 6.3.2.1. Recording Intermediate Results -- 6.3.2.2. Forward and Backward Propagation -- 6.3.2.3. Neutral Detection -- 6.3.3. BiasLayer -- 6.3.3.1. Basic Framework -- 6.3.3.2. Initialization and Loading of Parameters -- 6.3.3.3. Obtaining Parameters -- 6.3.3.4. Forward and Backward Propagation -- 6.3.3.5. Collecting Parameter Gradients -- 6.3.3.6. Neutral Detection -- 6.4. Basic Layers achieved in MetaNN -- 6.5. Summary -- 6.6. Exercises -- 7. Composite and Recurrent Layers -- 7.1. Interfaces and Design Principles of Composite Layers -- 7.1.1. Basic Structure -- 7.1.2. Syntax for Structural Description | |
505 | 8 | |a 7.1.3. The Inheritance Relationship of Policies | |
650 | 4 | |a Software patterns | |
776 | 0 | 8 | |i Erscheint auch als |a Wei, Li |t C++ Template Metaprogramming in Practice |d Milton : Auerbach Publishers, Incorporated,c2020 |n Druck-Ausgabe, Hardcover |z 978-0-367-60956-6 |
912 | |a ZDB-30-PQE | ||
999 | |a oai:aleph.bib-bvb.de:BVB01-032844216 | ||
966 | e | |u https://ebookcentral.proquest.com/lib/munchentech/detail.action?docID=6369331 |l TUM01 |p ZDB-30-PQE |q TUM_PDA_PQE_Kauf |x Aggregator |3 Volltext |
Datensatz im Suchindex
_version_ | 1804182734727282688 |
---|---|
adam_txt | |
any_adam_object | |
any_adam_object_boolean | |
author | Wei, Li |
author_facet | Wei, Li |
author_role | aut |
author_sort | Wei, Li |
author_variant | l w lw |
building | Verbundindex |
bvnumber | BV047442064 |
classification_tum | DAT 708 DAT 358 |
collection | ZDB-30-PQE |
contents | Cover -- Half Title -- Title Page -- Copyright Page -- Contents -- Preface -- Acknowledgment -- PART I: INTRODUCTION -- 1. Basic Tips -- 1.1. Metafunction and type_traits -- 1.1.1. Introduction to Metafunctions -- 1.1.2. Type Metafunction -- 1.1.3. Various Metafunctions -- 1.1.4. type_traits -- 1.1.5. Metafunctions and Macros -- 1.1.6. The Nominating Method of Metafunctions in This Book -- 1.2. Template Template Parameters and Container Templates -- 1.2.1. Templates as the Input of Metafunctions -- 1.2.2. Templates as the Output of Metafunctions -- 1.2.3. Container Templates -- 1.3. Writing of Sequences, Branches, and Looping Codes -- 1.3.1. Codes Executed in Sequence Order -- 1.3.2. Codes Executed in Branches -- 1.3.2.1. Implementing Branches Using std::conditional and std::conditional_t -- 1.3.2.2. Implementing Branches with (Partial) Specialization -- 1.3.2.3. Implementing Branches Using std::enable_if and std::enable_if_t -- 1.3.2.4. Compile-time Branches with Different Return Types -- 1.3.2.5. Simplify Codes with if constexpr -- 1.3.3. Codes Executed in Loops -- 1.3.4. Caution: Instantiation Explosion and Compilation Crash -- 1.3.5. Branch Selection and Short Circuit Logic -- 1.4. Curiously Recurring Template Pattern (CRTP) -- 1.5. Summary -- 1.6. Exercises -- 2. Heterogeneous Dictionaries and Policy Templates -- 2.1. Introduction to Named Arguments -- 2.2. Heterogeneous Dictionaries -- 2.2.1. How to Use the Module -- 2.2.2. The Representation of the Keys -- 2.2.3. Implementation of Heterogeneous Dictionaries -- 2.2.3.1. External Framework -- 2.2.3.2. Implementation of the Function Create -- 2.2.3.3. The Main Frame of Values -- 2.2.3.4. Logic Analysis of NewTupleType -- 2.2.4. A Brief Analysis of VarTypeDicts Performance -- 2.2.5. std::tuple as the Cache -- 2.3. Policy Templates -- 2.3.1. Introduction to Policies -- 2.3.1.1. Policy Objects 2.3.1.2. Policy Object Templates -- 2.3.2. Defining Policies and Policy Objects (Templates) -- 2.3.2.1. Policy Grouping -- 2.3.2.2. Declarations of Macros and Policy Objects (Templates) -- 2.3.3. Using Policies -- 2.3.4. Background Knowledge: Dominance and Virtual Inheritance -- 2.3.5. Policy Objects and Policy Dominance Structures -- 2.3.6. Policy Selection Metafunction -- 2.3.6.1. Main Frame -- 2.3.6.2. The Metafunction MinorCheck_ -- 2.3.6.3. Construct the Final Return Type -- 2.3.7. Simplifying Declarations of Policy Objects with Macros -- 2.4. Summary -- 2.5. Exercises -- PART II: THE DEEP LEARNING FRAMEWORK -- 3. A Brief Introduction to Deep Learning -- 3.1. Introduction to Deep Learning -- 3.1.1. From Machine Learning to Deep Learning -- 3.1.2. A Wide Variety of Artificial Neural Networks -- 3.1.2.1. Artificial Neural Networks and Matrix Operations -- 3.1.2.2. Deep Neural Network -- 3.1.2.3. Recurrent Neural Networks -- 3.1.2.4. Convolutional Neural Networks -- 3.1.2.5. Components of Neural Networks -- 3.1.3. Organization and Training of Deep Learning Systems -- 3.1.3.1. Network Structure and Loss Function -- 3.1.3.2. Model Training -- 3.1.3.3. Predictions with Models -- 3.2. The Framework Achieved in This BookMetaNN -- 3.2.1. From Computing Tools of Matrices to Deep Learning Frameworks -- 3.2.2. Introduction to MetaNN -- 3.2.3. What We Will Discuss -- 3.2.3.1. Data Representation -- 3.2.3.2. Matrix Operations -- 3.2.3.3. Layers and Automatic Derivation -- 3.2.3.4. Evaluation and Performance Optimization -- 3.2.4. Topics Not Covered in This Book -- 3.3. Summary -- 4. Type System and Basic Data Types -- 4.1. The Type System -- 4.1.1. Introduction to the Type System -- 4.1.2. Classification Systems of Iterators -- 4.1.3. Use Tags as Template Parameters -- 4.1.4. The Type System of MetaNN -- 4.1.5. Metafunctions Related to the Type System 4.1.5.1. Metafunction IsXXX -- 4.1.5.2. Metafunction DataCategory -- 4.2. Design Concepts -- 4.2.1. Support for Different Computing Devices and Computing Units -- 4.2.2. Allocation and Maintenance of Storage Space -- 4.2.2.1. Class Template Allocator -- 4.2.2.2. Class Template ContinuousMemory -- 4.2.3. Shallow Copy and Detection of Write Operations -- 4.2.3.1. Data Types without Requirements of Support for Element level Reading and Writing -- 4.2.3.2. Element-level Writing and Shallow Copy -- 4.2.4. Expansion of Underlying Interfaces -- 4.2.5. Type Conversion and Evaluation -- 4.2.6. Data Interface Specifications -- 4.3. Scalars -- 4.3.1. Declaration of Class Templates -- 4.3.2. A Specialized Version Based on CPU -- 4.3.2.1. Type Definitions and Data Members -- 4.3.2.2. Construction, Assignment, and Movement -- 4.3.2.3. Reading and Writing Elements -- 4.3.2.4. Evaluating Related Interfaces -- 4.3.3. The Principal Type of Scalars -- 4.4. Matrix -- 4.4.1. Class Template Matrix -- 4.4.1.1. Declarations and Interfaces -- 4.4.1.2. Dimensional Information and Element-level Reading and Writing -- 4.4.1.3. Submatrix -- 4.4.1.4. Underlying Access Interfaces of Matrix -- 4.4.2. Special Matrices: Trivial Matrix, Zero Matrix, and One-hot Vector -- 4.4.2.1. Trivial Matrix -- 4.4.2.2. Zero Matrix -- 4.4.2.3. One-hot Vector -- 4.4.3. Introducing a New Matrix Class -- 4.5. List -- 4.5.1. Template Batch -- 4.5.2. Template Array -- 4.5.2.1. Introduction of the Template Array -- 4.5.2.2. Class Template ArrayImp -- 4.5.2.3. Metafunction IsIterator -- 4.5.2.4. Construction of Array Objects -- 4.5.3. Duplication and Template Duplicate -- 4.5.3.1. Introduction of the Template Duplicate -- 4.5.3.2. Class Template DuplicateImp -- 4.5.3.3. Construction of the Duplicate Object -- 4.6. Summary -- 4.7. Exercises -- 5. Operations and Expression Templates 5.1. Introduction to Expression Templates -- 5.2. The Design Principles of Operation Templates in MetaNN -- 5.2.1. Problems of the Operation Template Add -- 5.2.2. Behavior Analysis of Operation Templates -- 5.2.2.1. Validation and Derivation of Types -- 5.2.2.2. Division of Object Interfaces -- 5.2.2.3. Auxiliary Class Templates -- 5.3. Classification of Operations -- 5.4. Auxiliary Templates -- 5.4.1. The Auxiliary Class Template OperElementType_/OperDeviceType_ -- 5.4.2. The Auxiliary Class Template OperXXX_ -- 5.4.3. The Auxiliary Class Template OperCateCal -- 5.4.4. The Auxiliary Class Template OperOrganizer -- 5.4.4.1. Specialization for Scalars -- 5.4.4.2. Specialization for Lists of Scalars -- 5.4.4.3. Other Specialized Versions -- 5.4.5. The Auxiliary Class Template OperSeq -- 5.5. Framework for Operation Templates -- 5.5.1. Category Tags for Operation Templates -- 5.5.2. Definition of UnaryOp -- 5.6. Examples of Operation Implementations -- 5.6.1. Sigmoid Operation -- 5.6.1.1. Function Interface -- 5.6.1.2. Template OperSigmoid_ -- 5.6.1.3. User Calls -- 5.6.2. Operation Add -- 5.6.2.1. Function Interface -- 5.6.2.2. The Implementation Framework of OperAdd_ -- 5.6.2.3. The Implementation of OperAdd_::Eval -- 5.6.3. Operation Transpose -- 5.6.4. Operation Collapse -- 5.7. The List of Operations Supported by MetaNN -- 5.7.1. Unary Operations -- 5.7.2. Binary Operations -- 5.7.3. Ternary Operations -- 5.8. The Trade-off and Limitations of Operations -- 5.8.1. The Trade-off of Operations -- 5.8.2. Limitations of Operations -- 5.9. Summary -- 5.10. Exercises -- 6. Basic Layers -- 6.1. Design Principles of Layers -- 6.1.1. Introduction to Layers -- 6.1.2. Construction of Layer Objects -- 6.1.2.1. Information Delivered through Constructors -- 6.1.2.2. Information Specified through Template Parameters 6.1.3. Initialization and Loading of Parameter Matrices -- 6.1.4. Forward Propagation -- 6.1.5. Preservation of Intermediate Results -- 6.1.6. Backward Propagation -- 6.1.7. Update of Parameter Matrices -- 6.1.8. Acquisition of Parameter Matrices -- 6.1.9. Neutral Detection of Layers -- 6.2. Auxiliary Logic for Layers -- 6.2.1. Initializing the Module -- 6.2.1.1. Using the Initialization Module -- 6.2.1.2. MakeInitializer -- 6.2.1.3. Class Template ParamInitializer -- 6.2.1.4. Class Template Initializer -- 6.2.2. Class Template DynamicData -- 6.2.2.1. Base Class Template DynamicCategory -- 6.2.2.2. Derived Class Template DynamicWrapper -- 6.2.2.3. Encapsulating Behaviors of Pointers with DynamicData -- 6.2.2.4. Category Tags -- 6.2.2.5. Auxiliary Functions and Auxiliary Meta Functions -- 6.2.2.6. DynamicData and Dynamic Type System -- 6.2.3. Common Policy Objects for Layers -- 6.2.3.1. Parameters Relevant to Update and Backward Propagation -- 6.2.3.2. Parameters Relevant to Input -- 6.2.3.3. Parameters Relevant to Operations -- 6.2.4. Metafunction InjectPolicy -- 6.2.5. Universal I/O Structure -- 6.2.6. Universal Operation Functions -- 6.3. Specific Implementations of Layers -- 6.3.1. AddLayer -- 6.3.2. ElementMulLayer -- 6.3.2.1. Recording Intermediate Results -- 6.3.2.2. Forward and Backward Propagation -- 6.3.2.3. Neutral Detection -- 6.3.3. BiasLayer -- 6.3.3.1. Basic Framework -- 6.3.3.2. Initialization and Loading of Parameters -- 6.3.3.3. Obtaining Parameters -- 6.3.3.4. Forward and Backward Propagation -- 6.3.3.5. Collecting Parameter Gradients -- 6.3.3.6. Neutral Detection -- 6.4. Basic Layers achieved in MetaNN -- 6.5. Summary -- 6.6. Exercises -- 7. Composite and Recurrent Layers -- 7.1. Interfaces and Design Principles of Composite Layers -- 7.1.1. Basic Structure -- 7.1.2. Syntax for Structural Description 7.1.3. The Inheritance Relationship of Policies |
ctrlnum | (ZDB-30-PQE)EBC6369331 (ZDB-30-PAD)EBC6369331 (ZDB-89-EBL)EBL6369331 (OCoLC)1231605860 (DE-599)BVBBV047442064 |
dewey-full | 005.13/3 |
dewey-hundreds | 000 - Computer science, information, general works |
dewey-ones | 005 - Computer programming, programs, data, security |
dewey-raw | 005.13/3 |
dewey-search | 005.13/3 |
dewey-sort | 15.13 13 |
dewey-tens | 000 - Computer science, information, general works |
discipline | Informatik |
discipline_str_mv | Informatik |
edition | First edition |
format | Electronic eBook |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>11029nmm a2200505zc 4500</leader><controlfield tag="001">BV047442064</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">20240216 </controlfield><controlfield tag="007">cr|uuu---uuuuu</controlfield><controlfield tag="008">210827s2020 |||| o||u| ||||||eng d</controlfield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781000219739</subfield><subfield code="9">978-1-00-021973-9</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781003102311</subfield><subfield code="9">978-1-003-10231-1</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(ZDB-30-PQE)EBC6369331</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(ZDB-30-PAD)EBC6369331</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(ZDB-89-EBL)EBL6369331</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)1231605860</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)BVBBV047442064</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DE-604</subfield><subfield code="b">ger</subfield><subfield code="e">rda</subfield></datafield><datafield tag="041" ind1="0" ind2=" "><subfield code="a">eng</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">DE-91</subfield></datafield><datafield tag="082" ind1="0" ind2=" "><subfield code="a">005.13/3</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">DAT 708</subfield><subfield code="2">stub</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">DAT 358</subfield><subfield code="2">stub</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">Wei, Li</subfield><subfield code="e">Verfasser</subfield><subfield code="4">aut</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">C++ template metaprogramming in practice</subfield><subfield code="b">a deep learning framework</subfield><subfield code="c">by Li Wei</subfield></datafield><datafield tag="250" ind1=" " ind2=" "><subfield code="a">First edition</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Boca Raton ; London ; New York</subfield><subfield code="b">CRC Press</subfield><subfield code="c">2020</subfield></datafield><datafield tag="264" ind1=" " ind2="4"><subfield code="c">© 2021</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">1 Online-Ressource</subfield><subfield code="b">Illustrationen</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="b">txt</subfield><subfield code="2">rdacontent</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="b">c</subfield><subfield code="2">rdamedia</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="b">cr</subfield><subfield code="2">rdacarrier</subfield></datafield><datafield tag="490" ind1="0" ind2=" "><subfield code="a">An Auerbach book</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">Description based on publisher supplied metadata and other sources</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">Cover -- Half Title -- Title Page -- Copyright Page -- Contents -- Preface -- Acknowledgment -- PART I: INTRODUCTION -- 1. Basic Tips -- 1.1. Metafunction and type_traits -- 1.1.1. Introduction to Metafunctions -- 1.1.2. Type Metafunction -- 1.1.3. Various Metafunctions -- 1.1.4. type_traits -- 1.1.5. Metafunctions and Macros -- 1.1.6. The Nominating Method of Metafunctions in This Book -- 1.2. Template Template Parameters and Container Templates -- 1.2.1. Templates as the Input of Metafunctions -- 1.2.2. Templates as the Output of Metafunctions -- 1.2.3. Container Templates -- 1.3. Writing of Sequences, Branches, and Looping Codes -- 1.3.1. Codes Executed in Sequence Order -- 1.3.2. Codes Executed in Branches -- 1.3.2.1. Implementing Branches Using std::conditional and std::conditional_t -- 1.3.2.2. Implementing Branches with (Partial) Specialization -- 1.3.2.3. Implementing Branches Using std::enable_if and std::enable_if_t -- 1.3.2.4. Compile-time Branches with Different Return Types -- 1.3.2.5. Simplify Codes with if constexpr -- 1.3.3. Codes Executed in Loops -- 1.3.4. Caution: Instantiation Explosion and Compilation Crash -- 1.3.5. Branch Selection and Short Circuit Logic -- 1.4. Curiously Recurring Template Pattern (CRTP) -- 1.5. Summary -- 1.6. Exercises -- 2. Heterogeneous Dictionaries and Policy Templates -- 2.1. Introduction to Named Arguments -- 2.2. Heterogeneous Dictionaries -- 2.2.1. How to Use the Module -- 2.2.2. The Representation of the Keys -- 2.2.3. Implementation of Heterogeneous Dictionaries -- 2.2.3.1. External Framework -- 2.2.3.2. Implementation of the Function Create -- 2.2.3.3. The Main Frame of Values -- 2.2.3.4. Logic Analysis of NewTupleType -- 2.2.4. A Brief Analysis of VarTypeDicts Performance -- 2.2.5. std::tuple as the Cache -- 2.3. Policy Templates -- 2.3.1. Introduction to Policies -- 2.3.1.1. Policy Objects</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">2.3.1.2. Policy Object Templates -- 2.3.2. Defining Policies and Policy Objects (Templates) -- 2.3.2.1. Policy Grouping -- 2.3.2.2. Declarations of Macros and Policy Objects (Templates) -- 2.3.3. Using Policies -- 2.3.4. Background Knowledge: Dominance and Virtual Inheritance -- 2.3.5. Policy Objects and Policy Dominance Structures -- 2.3.6. Policy Selection Metafunction -- 2.3.6.1. Main Frame -- 2.3.6.2. The Metafunction MinorCheck_ -- 2.3.6.3. Construct the Final Return Type -- 2.3.7. Simplifying Declarations of Policy Objects with Macros -- 2.4. Summary -- 2.5. Exercises -- PART II: THE DEEP LEARNING FRAMEWORK -- 3. A Brief Introduction to Deep Learning -- 3.1. Introduction to Deep Learning -- 3.1.1. From Machine Learning to Deep Learning -- 3.1.2. A Wide Variety of Artificial Neural Networks -- 3.1.2.1. Artificial Neural Networks and Matrix Operations -- 3.1.2.2. Deep Neural Network -- 3.1.2.3. Recurrent Neural Networks -- 3.1.2.4. Convolutional Neural Networks -- 3.1.2.5. Components of Neural Networks -- 3.1.3. Organization and Training of Deep Learning Systems -- 3.1.3.1. Network Structure and Loss Function -- 3.1.3.2. Model Training -- 3.1.3.3. Predictions with Models -- 3.2. The Framework Achieved in This BookMetaNN -- 3.2.1. From Computing Tools of Matrices to Deep Learning Frameworks -- 3.2.2. Introduction to MetaNN -- 3.2.3. What We Will Discuss -- 3.2.3.1. Data Representation -- 3.2.3.2. Matrix Operations -- 3.2.3.3. Layers and Automatic Derivation -- 3.2.3.4. Evaluation and Performance Optimization -- 3.2.4. Topics Not Covered in This Book -- 3.3. Summary -- 4. Type System and Basic Data Types -- 4.1. The Type System -- 4.1.1. Introduction to the Type System -- 4.1.2. Classification Systems of Iterators -- 4.1.3. Use Tags as Template Parameters -- 4.1.4. The Type System of MetaNN -- 4.1.5. Metafunctions Related to the Type System</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">4.1.5.1. Metafunction IsXXX -- 4.1.5.2. Metafunction DataCategory -- 4.2. Design Concepts -- 4.2.1. Support for Different Computing Devices and Computing Units -- 4.2.2. Allocation and Maintenance of Storage Space -- 4.2.2.1. Class Template Allocator -- 4.2.2.2. Class Template ContinuousMemory -- 4.2.3. Shallow Copy and Detection of Write Operations -- 4.2.3.1. Data Types without Requirements of Support for Element¬†level Reading and Writing -- 4.2.3.2. Element-level Writing and Shallow Copy -- 4.2.4. Expansion of Underlying Interfaces -- 4.2.5. Type Conversion and Evaluation -- 4.2.6. Data Interface Specifications -- 4.3. Scalars -- 4.3.1. Declaration of Class Templates -- 4.3.2. A Specialized Version Based on CPU -- 4.3.2.1. Type Definitions and Data Members -- 4.3.2.2. Construction, Assignment, and Movement -- 4.3.2.3. Reading and Writing Elements -- 4.3.2.4. Evaluating Related Interfaces -- 4.3.3. The Principal Type of Scalars -- 4.4. Matrix -- 4.4.1. Class Template Matrix -- 4.4.1.1. Declarations and Interfaces -- 4.4.1.2. Dimensional Information and Element-level Reading and Writing -- 4.4.1.3. Submatrix -- 4.4.1.4. Underlying Access Interfaces of Matrix -- 4.4.2. Special Matrices: Trivial Matrix, Zero Matrix, and One-hot Vector -- 4.4.2.1. Trivial Matrix -- 4.4.2.2. Zero Matrix -- 4.4.2.3. One-hot Vector -- 4.4.3. Introducing a New Matrix Class -- 4.5. List -- 4.5.1. Template Batch -- 4.5.2. Template Array -- 4.5.2.1. Introduction of the Template Array -- 4.5.2.2. Class Template ArrayImp -- 4.5.2.3. Metafunction IsIterator -- 4.5.2.4. Construction of Array Objects -- 4.5.3. Duplication and Template Duplicate -- 4.5.3.1. Introduction of the Template Duplicate -- 4.5.3.2. Class Template DuplicateImp -- 4.5.3.3. Construction of the Duplicate Object -- 4.6. Summary -- 4.7. Exercises -- 5. Operations and Expression Templates</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">5.1. Introduction to Expression Templates -- 5.2. The Design Principles of Operation Templates in MetaNN -- 5.2.1. Problems of the Operation Template Add -- 5.2.2. Behavior Analysis of Operation Templates -- 5.2.2.1. Validation and Derivation of Types -- 5.2.2.2. Division of Object Interfaces -- 5.2.2.3. Auxiliary Class Templates -- 5.3. Classification of Operations -- 5.4. Auxiliary Templates -- 5.4.1. The Auxiliary Class Template OperElementType_/OperDeviceType_ -- 5.4.2. The Auxiliary Class Template OperXXX_ -- 5.4.3. The Auxiliary Class Template OperCateCal -- 5.4.4. The Auxiliary Class Template OperOrganizer -- 5.4.4.1. Specialization for Scalars -- 5.4.4.2. Specialization for Lists of Scalars -- 5.4.4.3. Other Specialized Versions -- 5.4.5. The Auxiliary Class Template OperSeq -- 5.5. Framework for Operation Templates -- 5.5.1. Category Tags for Operation Templates -- 5.5.2. Definition of UnaryOp -- 5.6. Examples of Operation Implementations -- 5.6.1. Sigmoid Operation -- 5.6.1.1. Function Interface -- 5.6.1.2. Template OperSigmoid_ -- 5.6.1.3. User Calls -- 5.6.2. Operation Add -- 5.6.2.1. Function Interface -- 5.6.2.2. The Implementation Framework of OperAdd_ -- 5.6.2.3. The Implementation of OperAdd_::Eval -- 5.6.3. Operation Transpose -- 5.6.4. Operation Collapse -- 5.7. The List of Operations Supported by MetaNN -- 5.7.1. Unary Operations -- 5.7.2. Binary Operations -- 5.7.3. Ternary Operations -- 5.8. The Trade-off and Limitations of Operations -- 5.8.1. The Trade-off of Operations -- 5.8.2. Limitations of Operations -- 5.9. Summary -- 5.10. Exercises -- 6. Basic Layers -- 6.1. Design Principles of Layers -- 6.1.1. Introduction to Layers -- 6.1.2. Construction of Layer Objects -- 6.1.2.1. Information Delivered through Constructors -- 6.1.2.2. Information Specified through Template Parameters</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">6.1.3. Initialization and Loading of Parameter Matrices -- 6.1.4. Forward Propagation -- 6.1.5. Preservation of Intermediate Results -- 6.1.6. Backward Propagation -- 6.1.7. Update of Parameter Matrices -- 6.1.8. Acquisition of Parameter Matrices -- 6.1.9. Neutral Detection of Layers -- 6.2. Auxiliary Logic for Layers -- 6.2.1. Initializing the Module -- 6.2.1.1. Using the Initialization Module -- 6.2.1.2. MakeInitializer -- 6.2.1.3. Class Template ParamInitializer -- 6.2.1.4. Class Template Initializer -- 6.2.2. Class Template DynamicData -- 6.2.2.1. Base Class Template DynamicCategory -- 6.2.2.2. Derived Class Template DynamicWrapper -- 6.2.2.3. Encapsulating Behaviors of Pointers with DynamicData -- 6.2.2.4. Category Tags -- 6.2.2.5. Auxiliary Functions and Auxiliary Meta Functions -- 6.2.2.6. DynamicData and Dynamic Type System -- 6.2.3. Common Policy Objects for Layers -- 6.2.3.1. Parameters Relevant to Update and Backward Propagation -- 6.2.3.2. Parameters Relevant to Input -- 6.2.3.3. Parameters Relevant to Operations -- 6.2.4. Metafunction InjectPolicy -- 6.2.5. Universal I/O Structure -- 6.2.6. Universal Operation Functions -- 6.3. Specific Implementations of Layers -- 6.3.1. AddLayer -- 6.3.2. ElementMulLayer -- 6.3.2.1. Recording Intermediate Results -- 6.3.2.2. Forward and Backward Propagation -- 6.3.2.3. Neutral Detection -- 6.3.3. BiasLayer -- 6.3.3.1. Basic Framework -- 6.3.3.2. Initialization and Loading of Parameters -- 6.3.3.3. Obtaining Parameters -- 6.3.3.4. Forward and Backward Propagation -- 6.3.3.5. Collecting Parameter Gradients -- 6.3.3.6. Neutral Detection -- 6.4. Basic Layers achieved in MetaNN -- 6.5. Summary -- 6.6. Exercises -- 7. Composite and Recurrent Layers -- 7.1. Interfaces and Design Principles of Composite Layers -- 7.1.1. Basic Structure -- 7.1.2. Syntax for Structural Description</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">7.1.3. The Inheritance Relationship of Policies</subfield></datafield><datafield tag="650" ind1=" " ind2="4"><subfield code="a">Software patterns</subfield></datafield><datafield tag="776" ind1="0" ind2="8"><subfield code="i">Erscheint auch als</subfield><subfield code="a">Wei, Li</subfield><subfield code="t">C++ Template Metaprogramming in Practice</subfield><subfield code="d">Milton : Auerbach Publishers, Incorporated,c2020</subfield><subfield code="n">Druck-Ausgabe, Hardcover</subfield><subfield code="z">978-0-367-60956-6</subfield></datafield><datafield tag="912" ind1=" " ind2=" "><subfield code="a">ZDB-30-PQE</subfield></datafield><datafield tag="999" ind1=" " ind2=" "><subfield code="a">oai:aleph.bib-bvb.de:BVB01-032844216</subfield></datafield><datafield tag="966" ind1="e" ind2=" "><subfield code="u">https://ebookcentral.proquest.com/lib/munchentech/detail.action?docID=6369331</subfield><subfield code="l">TUM01</subfield><subfield code="p">ZDB-30-PQE</subfield><subfield code="q">TUM_PDA_PQE_Kauf</subfield><subfield code="x">Aggregator</subfield><subfield code="3">Volltext</subfield></datafield></record></collection> |
id | DE-604.BV047442064 |
illustrated | Not Illustrated |
index_date | 2024-07-03T18:01:24Z |
indexdate | 2024-07-10T09:12:16Z |
institution | BVB |
isbn | 9781000219739 9781003102311 |
language | English |
oai_aleph_id | oai:aleph.bib-bvb.de:BVB01-032844216 |
oclc_num | 1231605860 |
open_access_boolean | |
owner | DE-91 DE-BY-TUM |
owner_facet | DE-91 DE-BY-TUM |
physical | 1 Online-Ressource Illustrationen |
psigel | ZDB-30-PQE ZDB-30-PQE TUM_PDA_PQE_Kauf |
publishDate | 2020 |
publishDateSearch | 2020 |
publishDateSort | 2020 |
publisher | CRC Press |
record_format | marc |
series2 | An Auerbach book |
spelling | Wei, Li Verfasser aut C++ template metaprogramming in practice a deep learning framework by Li Wei First edition Boca Raton ; London ; New York CRC Press 2020 © 2021 1 Online-Ressource Illustrationen txt rdacontent c rdamedia cr rdacarrier An Auerbach book Description based on publisher supplied metadata and other sources Cover -- Half Title -- Title Page -- Copyright Page -- Contents -- Preface -- Acknowledgment -- PART I: INTRODUCTION -- 1. Basic Tips -- 1.1. Metafunction and type_traits -- 1.1.1. Introduction to Metafunctions -- 1.1.2. Type Metafunction -- 1.1.3. Various Metafunctions -- 1.1.4. type_traits -- 1.1.5. Metafunctions and Macros -- 1.1.6. The Nominating Method of Metafunctions in This Book -- 1.2. Template Template Parameters and Container Templates -- 1.2.1. Templates as the Input of Metafunctions -- 1.2.2. Templates as the Output of Metafunctions -- 1.2.3. Container Templates -- 1.3. Writing of Sequences, Branches, and Looping Codes -- 1.3.1. Codes Executed in Sequence Order -- 1.3.2. Codes Executed in Branches -- 1.3.2.1. Implementing Branches Using std::conditional and std::conditional_t -- 1.3.2.2. Implementing Branches with (Partial) Specialization -- 1.3.2.3. Implementing Branches Using std::enable_if and std::enable_if_t -- 1.3.2.4. Compile-time Branches with Different Return Types -- 1.3.2.5. Simplify Codes with if constexpr -- 1.3.3. Codes Executed in Loops -- 1.3.4. Caution: Instantiation Explosion and Compilation Crash -- 1.3.5. Branch Selection and Short Circuit Logic -- 1.4. Curiously Recurring Template Pattern (CRTP) -- 1.5. Summary -- 1.6. Exercises -- 2. Heterogeneous Dictionaries and Policy Templates -- 2.1. Introduction to Named Arguments -- 2.2. Heterogeneous Dictionaries -- 2.2.1. How to Use the Module -- 2.2.2. The Representation of the Keys -- 2.2.3. Implementation of Heterogeneous Dictionaries -- 2.2.3.1. External Framework -- 2.2.3.2. Implementation of the Function Create -- 2.2.3.3. The Main Frame of Values -- 2.2.3.4. Logic Analysis of NewTupleType -- 2.2.4. A Brief Analysis of VarTypeDicts Performance -- 2.2.5. std::tuple as the Cache -- 2.3. Policy Templates -- 2.3.1. Introduction to Policies -- 2.3.1.1. Policy Objects 2.3.1.2. Policy Object Templates -- 2.3.2. Defining Policies and Policy Objects (Templates) -- 2.3.2.1. Policy Grouping -- 2.3.2.2. Declarations of Macros and Policy Objects (Templates) -- 2.3.3. Using Policies -- 2.3.4. Background Knowledge: Dominance and Virtual Inheritance -- 2.3.5. Policy Objects and Policy Dominance Structures -- 2.3.6. Policy Selection Metafunction -- 2.3.6.1. Main Frame -- 2.3.6.2. The Metafunction MinorCheck_ -- 2.3.6.3. Construct the Final Return Type -- 2.3.7. Simplifying Declarations of Policy Objects with Macros -- 2.4. Summary -- 2.5. Exercises -- PART II: THE DEEP LEARNING FRAMEWORK -- 3. A Brief Introduction to Deep Learning -- 3.1. Introduction to Deep Learning -- 3.1.1. From Machine Learning to Deep Learning -- 3.1.2. A Wide Variety of Artificial Neural Networks -- 3.1.2.1. Artificial Neural Networks and Matrix Operations -- 3.1.2.2. Deep Neural Network -- 3.1.2.3. Recurrent Neural Networks -- 3.1.2.4. Convolutional Neural Networks -- 3.1.2.5. Components of Neural Networks -- 3.1.3. Organization and Training of Deep Learning Systems -- 3.1.3.1. Network Structure and Loss Function -- 3.1.3.2. Model Training -- 3.1.3.3. Predictions with Models -- 3.2. The Framework Achieved in This BookMetaNN -- 3.2.1. From Computing Tools of Matrices to Deep Learning Frameworks -- 3.2.2. Introduction to MetaNN -- 3.2.3. What We Will Discuss -- 3.2.3.1. Data Representation -- 3.2.3.2. Matrix Operations -- 3.2.3.3. Layers and Automatic Derivation -- 3.2.3.4. Evaluation and Performance Optimization -- 3.2.4. Topics Not Covered in This Book -- 3.3. Summary -- 4. Type System and Basic Data Types -- 4.1. The Type System -- 4.1.1. Introduction to the Type System -- 4.1.2. Classification Systems of Iterators -- 4.1.3. Use Tags as Template Parameters -- 4.1.4. The Type System of MetaNN -- 4.1.5. Metafunctions Related to the Type System 4.1.5.1. Metafunction IsXXX -- 4.1.5.2. Metafunction DataCategory -- 4.2. Design Concepts -- 4.2.1. Support for Different Computing Devices and Computing Units -- 4.2.2. Allocation and Maintenance of Storage Space -- 4.2.2.1. Class Template Allocator -- 4.2.2.2. Class Template ContinuousMemory -- 4.2.3. Shallow Copy and Detection of Write Operations -- 4.2.3.1. Data Types without Requirements of Support for Element¬†level Reading and Writing -- 4.2.3.2. Element-level Writing and Shallow Copy -- 4.2.4. Expansion of Underlying Interfaces -- 4.2.5. Type Conversion and Evaluation -- 4.2.6. Data Interface Specifications -- 4.3. Scalars -- 4.3.1. Declaration of Class Templates -- 4.3.2. A Specialized Version Based on CPU -- 4.3.2.1. Type Definitions and Data Members -- 4.3.2.2. Construction, Assignment, and Movement -- 4.3.2.3. Reading and Writing Elements -- 4.3.2.4. Evaluating Related Interfaces -- 4.3.3. The Principal Type of Scalars -- 4.4. Matrix -- 4.4.1. Class Template Matrix -- 4.4.1.1. Declarations and Interfaces -- 4.4.1.2. Dimensional Information and Element-level Reading and Writing -- 4.4.1.3. Submatrix -- 4.4.1.4. Underlying Access Interfaces of Matrix -- 4.4.2. Special Matrices: Trivial Matrix, Zero Matrix, and One-hot Vector -- 4.4.2.1. Trivial Matrix -- 4.4.2.2. Zero Matrix -- 4.4.2.3. One-hot Vector -- 4.4.3. Introducing a New Matrix Class -- 4.5. List -- 4.5.1. Template Batch -- 4.5.2. Template Array -- 4.5.2.1. Introduction of the Template Array -- 4.5.2.2. Class Template ArrayImp -- 4.5.2.3. Metafunction IsIterator -- 4.5.2.4. Construction of Array Objects -- 4.5.3. Duplication and Template Duplicate -- 4.5.3.1. Introduction of the Template Duplicate -- 4.5.3.2. Class Template DuplicateImp -- 4.5.3.3. Construction of the Duplicate Object -- 4.6. Summary -- 4.7. Exercises -- 5. Operations and Expression Templates 5.1. Introduction to Expression Templates -- 5.2. The Design Principles of Operation Templates in MetaNN -- 5.2.1. Problems of the Operation Template Add -- 5.2.2. Behavior Analysis of Operation Templates -- 5.2.2.1. Validation and Derivation of Types -- 5.2.2.2. Division of Object Interfaces -- 5.2.2.3. Auxiliary Class Templates -- 5.3. Classification of Operations -- 5.4. Auxiliary Templates -- 5.4.1. The Auxiliary Class Template OperElementType_/OperDeviceType_ -- 5.4.2. The Auxiliary Class Template OperXXX_ -- 5.4.3. The Auxiliary Class Template OperCateCal -- 5.4.4. The Auxiliary Class Template OperOrganizer -- 5.4.4.1. Specialization for Scalars -- 5.4.4.2. Specialization for Lists of Scalars -- 5.4.4.3. Other Specialized Versions -- 5.4.5. The Auxiliary Class Template OperSeq -- 5.5. Framework for Operation Templates -- 5.5.1. Category Tags for Operation Templates -- 5.5.2. Definition of UnaryOp -- 5.6. Examples of Operation Implementations -- 5.6.1. Sigmoid Operation -- 5.6.1.1. Function Interface -- 5.6.1.2. Template OperSigmoid_ -- 5.6.1.3. User Calls -- 5.6.2. Operation Add -- 5.6.2.1. Function Interface -- 5.6.2.2. The Implementation Framework of OperAdd_ -- 5.6.2.3. The Implementation of OperAdd_::Eval -- 5.6.3. Operation Transpose -- 5.6.4. Operation Collapse -- 5.7. The List of Operations Supported by MetaNN -- 5.7.1. Unary Operations -- 5.7.2. Binary Operations -- 5.7.3. Ternary Operations -- 5.8. The Trade-off and Limitations of Operations -- 5.8.1. The Trade-off of Operations -- 5.8.2. Limitations of Operations -- 5.9. Summary -- 5.10. Exercises -- 6. Basic Layers -- 6.1. Design Principles of Layers -- 6.1.1. Introduction to Layers -- 6.1.2. Construction of Layer Objects -- 6.1.2.1. Information Delivered through Constructors -- 6.1.2.2. Information Specified through Template Parameters 6.1.3. Initialization and Loading of Parameter Matrices -- 6.1.4. Forward Propagation -- 6.1.5. Preservation of Intermediate Results -- 6.1.6. Backward Propagation -- 6.1.7. Update of Parameter Matrices -- 6.1.8. Acquisition of Parameter Matrices -- 6.1.9. Neutral Detection of Layers -- 6.2. Auxiliary Logic for Layers -- 6.2.1. Initializing the Module -- 6.2.1.1. Using the Initialization Module -- 6.2.1.2. MakeInitializer -- 6.2.1.3. Class Template ParamInitializer -- 6.2.1.4. Class Template Initializer -- 6.2.2. Class Template DynamicData -- 6.2.2.1. Base Class Template DynamicCategory -- 6.2.2.2. Derived Class Template DynamicWrapper -- 6.2.2.3. Encapsulating Behaviors of Pointers with DynamicData -- 6.2.2.4. Category Tags -- 6.2.2.5. Auxiliary Functions and Auxiliary Meta Functions -- 6.2.2.6. DynamicData and Dynamic Type System -- 6.2.3. Common Policy Objects for Layers -- 6.2.3.1. Parameters Relevant to Update and Backward Propagation -- 6.2.3.2. Parameters Relevant to Input -- 6.2.3.3. Parameters Relevant to Operations -- 6.2.4. Metafunction InjectPolicy -- 6.2.5. Universal I/O Structure -- 6.2.6. Universal Operation Functions -- 6.3. Specific Implementations of Layers -- 6.3.1. AddLayer -- 6.3.2. ElementMulLayer -- 6.3.2.1. Recording Intermediate Results -- 6.3.2.2. Forward and Backward Propagation -- 6.3.2.3. Neutral Detection -- 6.3.3. BiasLayer -- 6.3.3.1. Basic Framework -- 6.3.3.2. Initialization and Loading of Parameters -- 6.3.3.3. Obtaining Parameters -- 6.3.3.4. Forward and Backward Propagation -- 6.3.3.5. Collecting Parameter Gradients -- 6.3.3.6. Neutral Detection -- 6.4. Basic Layers achieved in MetaNN -- 6.5. Summary -- 6.6. Exercises -- 7. Composite and Recurrent Layers -- 7.1. Interfaces and Design Principles of Composite Layers -- 7.1.1. Basic Structure -- 7.1.2. Syntax for Structural Description 7.1.3. The Inheritance Relationship of Policies Software patterns Erscheint auch als Wei, Li C++ Template Metaprogramming in Practice Milton : Auerbach Publishers, Incorporated,c2020 Druck-Ausgabe, Hardcover 978-0-367-60956-6 |
spellingShingle | Wei, Li C++ template metaprogramming in practice a deep learning framework Cover -- Half Title -- Title Page -- Copyright Page -- Contents -- Preface -- Acknowledgment -- PART I: INTRODUCTION -- 1. Basic Tips -- 1.1. Metafunction and type_traits -- 1.1.1. Introduction to Metafunctions -- 1.1.2. Type Metafunction -- 1.1.3. Various Metafunctions -- 1.1.4. type_traits -- 1.1.5. Metafunctions and Macros -- 1.1.6. The Nominating Method of Metafunctions in This Book -- 1.2. Template Template Parameters and Container Templates -- 1.2.1. Templates as the Input of Metafunctions -- 1.2.2. Templates as the Output of Metafunctions -- 1.2.3. Container Templates -- 1.3. Writing of Sequences, Branches, and Looping Codes -- 1.3.1. Codes Executed in Sequence Order -- 1.3.2. Codes Executed in Branches -- 1.3.2.1. Implementing Branches Using std::conditional and std::conditional_t -- 1.3.2.2. Implementing Branches with (Partial) Specialization -- 1.3.2.3. Implementing Branches Using std::enable_if and std::enable_if_t -- 1.3.2.4. Compile-time Branches with Different Return Types -- 1.3.2.5. Simplify Codes with if constexpr -- 1.3.3. Codes Executed in Loops -- 1.3.4. Caution: Instantiation Explosion and Compilation Crash -- 1.3.5. Branch Selection and Short Circuit Logic -- 1.4. Curiously Recurring Template Pattern (CRTP) -- 1.5. Summary -- 1.6. Exercises -- 2. Heterogeneous Dictionaries and Policy Templates -- 2.1. Introduction to Named Arguments -- 2.2. Heterogeneous Dictionaries -- 2.2.1. How to Use the Module -- 2.2.2. The Representation of the Keys -- 2.2.3. Implementation of Heterogeneous Dictionaries -- 2.2.3.1. External Framework -- 2.2.3.2. Implementation of the Function Create -- 2.2.3.3. The Main Frame of Values -- 2.2.3.4. Logic Analysis of NewTupleType -- 2.2.4. A Brief Analysis of VarTypeDicts Performance -- 2.2.5. std::tuple as the Cache -- 2.3. Policy Templates -- 2.3.1. Introduction to Policies -- 2.3.1.1. Policy Objects 2.3.1.2. Policy Object Templates -- 2.3.2. Defining Policies and Policy Objects (Templates) -- 2.3.2.1. Policy Grouping -- 2.3.2.2. Declarations of Macros and Policy Objects (Templates) -- 2.3.3. Using Policies -- 2.3.4. Background Knowledge: Dominance and Virtual Inheritance -- 2.3.5. Policy Objects and Policy Dominance Structures -- 2.3.6. Policy Selection Metafunction -- 2.3.6.1. Main Frame -- 2.3.6.2. The Metafunction MinorCheck_ -- 2.3.6.3. Construct the Final Return Type -- 2.3.7. Simplifying Declarations of Policy Objects with Macros -- 2.4. Summary -- 2.5. Exercises -- PART II: THE DEEP LEARNING FRAMEWORK -- 3. A Brief Introduction to Deep Learning -- 3.1. Introduction to Deep Learning -- 3.1.1. From Machine Learning to Deep Learning -- 3.1.2. A Wide Variety of Artificial Neural Networks -- 3.1.2.1. Artificial Neural Networks and Matrix Operations -- 3.1.2.2. Deep Neural Network -- 3.1.2.3. Recurrent Neural Networks -- 3.1.2.4. Convolutional Neural Networks -- 3.1.2.5. Components of Neural Networks -- 3.1.3. Organization and Training of Deep Learning Systems -- 3.1.3.1. Network Structure and Loss Function -- 3.1.3.2. Model Training -- 3.1.3.3. Predictions with Models -- 3.2. The Framework Achieved in This BookMetaNN -- 3.2.1. From Computing Tools of Matrices to Deep Learning Frameworks -- 3.2.2. Introduction to MetaNN -- 3.2.3. What We Will Discuss -- 3.2.3.1. Data Representation -- 3.2.3.2. Matrix Operations -- 3.2.3.3. Layers and Automatic Derivation -- 3.2.3.4. Evaluation and Performance Optimization -- 3.2.4. Topics Not Covered in This Book -- 3.3. Summary -- 4. Type System and Basic Data Types -- 4.1. The Type System -- 4.1.1. Introduction to the Type System -- 4.1.2. Classification Systems of Iterators -- 4.1.3. Use Tags as Template Parameters -- 4.1.4. The Type System of MetaNN -- 4.1.5. Metafunctions Related to the Type System 4.1.5.1. Metafunction IsXXX -- 4.1.5.2. Metafunction DataCategory -- 4.2. Design Concepts -- 4.2.1. Support for Different Computing Devices and Computing Units -- 4.2.2. Allocation and Maintenance of Storage Space -- 4.2.2.1. Class Template Allocator -- 4.2.2.2. Class Template ContinuousMemory -- 4.2.3. Shallow Copy and Detection of Write Operations -- 4.2.3.1. Data Types without Requirements of Support for Element level Reading and Writing -- 4.2.3.2. Element-level Writing and Shallow Copy -- 4.2.4. Expansion of Underlying Interfaces -- 4.2.5. Type Conversion and Evaluation -- 4.2.6. Data Interface Specifications -- 4.3. Scalars -- 4.3.1. Declaration of Class Templates -- 4.3.2. A Specialized Version Based on CPU -- 4.3.2.1. Type Definitions and Data Members -- 4.3.2.2. Construction, Assignment, and Movement -- 4.3.2.3. Reading and Writing Elements -- 4.3.2.4. Evaluating Related Interfaces -- 4.3.3. The Principal Type of Scalars -- 4.4. Matrix -- 4.4.1. Class Template Matrix -- 4.4.1.1. Declarations and Interfaces -- 4.4.1.2. Dimensional Information and Element-level Reading and Writing -- 4.4.1.3. Submatrix -- 4.4.1.4. Underlying Access Interfaces of Matrix -- 4.4.2. Special Matrices: Trivial Matrix, Zero Matrix, and One-hot Vector -- 4.4.2.1. Trivial Matrix -- 4.4.2.2. Zero Matrix -- 4.4.2.3. One-hot Vector -- 4.4.3. Introducing a New Matrix Class -- 4.5. List -- 4.5.1. Template Batch -- 4.5.2. Template Array -- 4.5.2.1. Introduction of the Template Array -- 4.5.2.2. Class Template ArrayImp -- 4.5.2.3. Metafunction IsIterator -- 4.5.2.4. Construction of Array Objects -- 4.5.3. Duplication and Template Duplicate -- 4.5.3.1. Introduction of the Template Duplicate -- 4.5.3.2. Class Template DuplicateImp -- 4.5.3.3. Construction of the Duplicate Object -- 4.6. Summary -- 4.7. Exercises -- 5. Operations and Expression Templates 5.1. Introduction to Expression Templates -- 5.2. The Design Principles of Operation Templates in MetaNN -- 5.2.1. Problems of the Operation Template Add -- 5.2.2. Behavior Analysis of Operation Templates -- 5.2.2.1. Validation and Derivation of Types -- 5.2.2.2. Division of Object Interfaces -- 5.2.2.3. Auxiliary Class Templates -- 5.3. Classification of Operations -- 5.4. Auxiliary Templates -- 5.4.1. The Auxiliary Class Template OperElementType_/OperDeviceType_ -- 5.4.2. The Auxiliary Class Template OperXXX_ -- 5.4.3. The Auxiliary Class Template OperCateCal -- 5.4.4. The Auxiliary Class Template OperOrganizer -- 5.4.4.1. Specialization for Scalars -- 5.4.4.2. Specialization for Lists of Scalars -- 5.4.4.3. Other Specialized Versions -- 5.4.5. The Auxiliary Class Template OperSeq -- 5.5. Framework for Operation Templates -- 5.5.1. Category Tags for Operation Templates -- 5.5.2. Definition of UnaryOp -- 5.6. Examples of Operation Implementations -- 5.6.1. Sigmoid Operation -- 5.6.1.1. Function Interface -- 5.6.1.2. Template OperSigmoid_ -- 5.6.1.3. User Calls -- 5.6.2. Operation Add -- 5.6.2.1. Function Interface -- 5.6.2.2. The Implementation Framework of OperAdd_ -- 5.6.2.3. The Implementation of OperAdd_::Eval -- 5.6.3. Operation Transpose -- 5.6.4. Operation Collapse -- 5.7. The List of Operations Supported by MetaNN -- 5.7.1. Unary Operations -- 5.7.2. Binary Operations -- 5.7.3. Ternary Operations -- 5.8. The Trade-off and Limitations of Operations -- 5.8.1. The Trade-off of Operations -- 5.8.2. Limitations of Operations -- 5.9. Summary -- 5.10. Exercises -- 6. Basic Layers -- 6.1. Design Principles of Layers -- 6.1.1. Introduction to Layers -- 6.1.2. Construction of Layer Objects -- 6.1.2.1. Information Delivered through Constructors -- 6.1.2.2. Information Specified through Template Parameters 6.1.3. Initialization and Loading of Parameter Matrices -- 6.1.4. Forward Propagation -- 6.1.5. Preservation of Intermediate Results -- 6.1.6. Backward Propagation -- 6.1.7. Update of Parameter Matrices -- 6.1.8. Acquisition of Parameter Matrices -- 6.1.9. Neutral Detection of Layers -- 6.2. Auxiliary Logic for Layers -- 6.2.1. Initializing the Module -- 6.2.1.1. Using the Initialization Module -- 6.2.1.2. MakeInitializer -- 6.2.1.3. Class Template ParamInitializer -- 6.2.1.4. Class Template Initializer -- 6.2.2. Class Template DynamicData -- 6.2.2.1. Base Class Template DynamicCategory -- 6.2.2.2. Derived Class Template DynamicWrapper -- 6.2.2.3. Encapsulating Behaviors of Pointers with DynamicData -- 6.2.2.4. Category Tags -- 6.2.2.5. Auxiliary Functions and Auxiliary Meta Functions -- 6.2.2.6. DynamicData and Dynamic Type System -- 6.2.3. Common Policy Objects for Layers -- 6.2.3.1. Parameters Relevant to Update and Backward Propagation -- 6.2.3.2. Parameters Relevant to Input -- 6.2.3.3. Parameters Relevant to Operations -- 6.2.4. Metafunction InjectPolicy -- 6.2.5. Universal I/O Structure -- 6.2.6. Universal Operation Functions -- 6.3. Specific Implementations of Layers -- 6.3.1. AddLayer -- 6.3.2. ElementMulLayer -- 6.3.2.1. Recording Intermediate Results -- 6.3.2.2. Forward and Backward Propagation -- 6.3.2.3. Neutral Detection -- 6.3.3. BiasLayer -- 6.3.3.1. Basic Framework -- 6.3.3.2. Initialization and Loading of Parameters -- 6.3.3.3. Obtaining Parameters -- 6.3.3.4. Forward and Backward Propagation -- 6.3.3.5. Collecting Parameter Gradients -- 6.3.3.6. Neutral Detection -- 6.4. Basic Layers achieved in MetaNN -- 6.5. Summary -- 6.6. Exercises -- 7. Composite and Recurrent Layers -- 7.1. Interfaces and Design Principles of Composite Layers -- 7.1.1. Basic Structure -- 7.1.2. Syntax for Structural Description 7.1.3. The Inheritance Relationship of Policies Software patterns |
title | C++ template metaprogramming in practice a deep learning framework |
title_auth | C++ template metaprogramming in practice a deep learning framework |
title_exact_search | C++ template metaprogramming in practice a deep learning framework |
title_exact_search_txtP | C++ template metaprogramming in practice a deep learning framework |
title_full | C++ template metaprogramming in practice a deep learning framework by Li Wei |
title_fullStr | C++ template metaprogramming in practice a deep learning framework by Li Wei |
title_full_unstemmed | C++ template metaprogramming in practice a deep learning framework by Li Wei |
title_short | C++ template metaprogramming in practice |
title_sort | c template metaprogramming in practice a deep learning framework |
title_sub | a deep learning framework |
topic | Software patterns |
topic_facet | Software patterns |
work_keys_str_mv | AT weili ctemplatemetaprogramminginpracticeadeeplearningframework |