From a6f38cc856ee31fc6d668003b2d8f66606406a4e Mon Sep 17 00:00:00 2001 From: Guled Date: 2017εΉ΄3月31ζ—₯ 14:14:46 -0500 Subject: [PATCH 01/27] Updated README --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index fc538b5..091e568 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ To contribute to an already existant algorithm within the framework, please crea ### Roadmap: +- [ ] [Issue #2](https://github.com/Somnibyte/MLKit/issues/2) - [ ] KMeans++ Implementation - [ ] KMeans Clustering Documentation - [ ] Neural Network Documentation @@ -65,7 +66,6 @@ To contribute to an already existant algorithm within the framework, please crea - [ ] Artificial Neural Network using Metal - [ ] Game Playing AI (MiniMax, Alpha-Beta Pruning) - [ ] Self Organizing Maps -- [ ] Enable Neural Network class to allow for multiple hidden layers (currently 1 is only allowed) ---------------------------------------------- ## Features (So Far) @@ -92,10 +92,7 @@ To contribute to an already existant algorithm within the framework, please crea ## Development Schedule -### Week of Mar 20th -|M|T|W|Th|F| -|---|---|---|---|---| -|-|-|Documentation|K-Means++|TBD +TBD ---------------------------------------------- From 7ad681c4d292ee41ca594f868f7085d71eca8e5e Mon Sep 17 00:00:00 2001 From: Guled Date: Tue, 4 Apr 2017 15:31:30 -0500 Subject: [PATCH 02/27] Experimental Neural Network Revision in Playground --- MLKit-PlayGround.playground/Contents.swift | 110 +++++++++++++++++- .../timeline.xctimeline | 11 ++ MLKit/Classes/ANN/Neuron.swift | 2 + 3 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 MLKit-PlayGround.playground/timeline.xctimeline diff --git a/MLKit-PlayGround.playground/Contents.swift b/MLKit-PlayGround.playground/Contents.swift index a449900..09eb9f0 100644 --- a/MLKit-PlayGround.playground/Contents.swift +++ b/MLKit-PlayGround.playground/Contents.swift @@ -6,9 +6,115 @@ import Upsurge // Feed Forward Implementation class NeuralNetwork { - private var numberOfLayers = 2 - + public var numberOfLayers: Int? + public var networkSize: [Int]? + public var bias: [Matrix]? + public var weights: [Matrix]? + + init(size:[Int]){ + + self.numberOfLayers = size.count + + self.networkSize = size + + self.bias = generateRandomBiases() + + self.weights = generateRandomWeights() + } + + // TODO: ERROR CHECKING + func generateRandomBiases() -> [Matrix] { + var biases: [Matrix] = [] + + for i in stride(from: 1, to: networkSize!.count, by: 1) { + + var bias: [Float] = [] + var length: Int = networkSize![i] + + for j in 0..(rows: length, columns: 1, elements: biasAsValueArray) + biases.append(biasAsMatrix) + } + + return biases + } + + public func feedforward(activation:Matrix) -> Matrix { + + var a = activation + + for (b, w) in zip(self.bias!, self.weights!) { + a = (w * a) + b + a.elements.map(fncSigLog) + } + + return a + } + + func generateRandomWeights() -> [Matrix]{ + var pairs = zip(Array(networkSize![0...networkSize!.count-2]), Array(networkSize![1...networkSize!.count-1])) + var arrayOfWeights: [Matrix] = [] + + for pair in pairs { + var numberOfWeightsInMatrix = pair.0 * pair.1 + var elements:[Float] = [] + + for i in 1...numberOfWeightsInMatrix { + elements.append(generateRandomNumber()) + } + + var weights = Matrix(rows:pair.1, columns:pair.0, elements: elements) + arrayOfWeights.append(weights) + } + + + return arrayOfWeights + } + + func generateRandomNumber() -> Float{ + let u = Float(arc4random()) / Float(UINT32_MAX) + let v = Float(arc4random()) / Float(UINT32_MAX) + let randomNum = sqrt(-2*log(u))*cos(Float(2) * Float(M_PI) * v) + + return randomNum + } + + public func fncSigLog(val: Float) -> Float { + return 1.0 / (1.0 + exp(-val)) + } } +var nn = NeuralNetwork(size: [2,3,1]) +var a = Matrix(rows: 2, columns: 1, elements: [1.0,1.0]) +print(nn.feedforward(activation: a)) + +/* +var bias = nn.bias +var weights = nn.weights +var a = Matrix(rows: 2, columns: 1, elements: [1.0,1.0]) + +var b = weights![0] * a +var c = (b + bias![0]) +c.elements.map(nn.fncSigLog) + +//print(c) + + var d = weights![1] * c + var e = (d + bias![1]) + e.elements.map(nn.fncSigLog) + + print(e) + +*/ + + + + + + diff --git a/MLKit-PlayGround.playground/timeline.xctimeline b/MLKit-PlayGround.playground/timeline.xctimeline new file mode 100644 index 0000000..fc6586c --- /dev/null +++ b/MLKit-PlayGround.playground/timeline.xctimeline @@ -0,0 +1,11 @@ + + + + + + + diff --git a/MLKit/Classes/ANN/Neuron.swift b/MLKit/Classes/ANN/Neuron.swift index 8ff04e1..b850843 100644 --- a/MLKit/Classes/ANN/Neuron.swift +++ b/MLKit/Classes/ANN/Neuron.swift @@ -32,6 +32,8 @@ open class Neuron { The initializeNeuron method initializes a neuron with a random Float value. */ open func initializeNeuron() -> Float { + + return Float(arc4random()) / Float(UINT32_MAX) } From 1078c804da1a0167a2e2f24ac3cbeffcc6037127 Mon Sep 17 00:00:00 2001 From: Guled Date: Tue, 4 Apr 2017 15:35:38 -0500 Subject: [PATCH 03/27] Updated README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fc538b5..c24d15b 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ To contribute to an already existant algorithm within the framework, please crea ### Roadmap: +- [ ] [Issue #2](https://github.com/Somnibyte/MLKit/issues/2) - [ ] KMeans++ Implementation - [ ] KMeans Clustering Documentation - [ ] Neural Network Documentation @@ -65,7 +66,6 @@ To contribute to an already existant algorithm within the framework, please crea - [ ] Artificial Neural Network using Metal - [ ] Game Playing AI (MiniMax, Alpha-Beta Pruning) - [ ] Self Organizing Maps -- [ ] Enable Neural Network class to allow for multiple hidden layers (currently 1 is only allowed) ---------------------------------------------- ## Features (So Far) @@ -92,10 +92,10 @@ To contribute to an already existant algorithm within the framework, please crea ## Development Schedule -### Week of Mar 20th +### Week of April 3rd |M|T|W|Th|F| |---|---|---|---|---| -|-|-|Documentation|K-Means++|TBD +|Neural Network Revision ([Checkout Neural-Network-Revision](https://github.com/Somnibyte/MLKit/tree/neural-network-revision))||Neural Network Revision ([Checkout Neural-Network-Revision](https://github.com/Somnibyte/MLKit/tree/neural-network-revision))|TBD|TBD ---------------------------------------------- From 9f4f850fb4f1401a42daf79bd5fa6d1d36ec3785 Mon Sep 17 00:00:00 2001 From: Guled Date: Tue, 4 Apr 2017 15:37:03 -0500 Subject: [PATCH 04/27] Currently Working on Neural Network Revision. --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 091e568..c24d15b 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,10 @@ To contribute to an already existant algorithm within the framework, please crea ## Development Schedule -TBD +### Week of April 3rd +|M|T|W|Th|F| +|---|---|---|---|---| +|Neural Network Revision ([Checkout Neural-Network-Revision](https://github.com/Somnibyte/MLKit/tree/neural-network-revision))||Neural Network Revision ([Checkout Neural-Network-Revision](https://github.com/Somnibyte/MLKit/tree/neural-network-revision))|TBD|TBD ---------------------------------------------- From fef17c3d1cc342623461292c9d7896b473489e67 Mon Sep 17 00:00:00 2001 From: Guled Date: Tue, 4 Apr 2017 15:37:48 -0500 Subject: [PATCH 05/27] Typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c24d15b..b593506 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ To contribute to an already existant algorithm within the framework, please crea ### Week of April 3rd |M|T|W|Th|F| |---|---|---|---|---| -|Neural Network Revision ([Checkout Neural-Network-Revision](https://github.com/Somnibyte/MLKit/tree/neural-network-revision))||Neural Network Revision ([Checkout Neural-Network-Revision](https://github.com/Somnibyte/MLKit/tree/neural-network-revision))|TBD|TBD +|Neural Network Revision ([Checkout Neural-Network-Revision](https://github.com/Somnibyte/MLKit/tree/neural-network-revision))|Neural Network Revision ([Checkout Neural-Network-Revision](https://github.com/Somnibyte/MLKit/tree/neural-network-revision))|Neural Network Revision ([Checkout Neural-Network-Revision](https://github.com/Somnibyte/MLKit/tree/neural-network-revision))|TBD|TBD ---------------------------------------------- From 3c3f02c48b93a71f6bb368180d5b4d59d5be7cdb Mon Sep 17 00:00:00 2001 From: Guled Date: Thu, 6 Apr 2017 16:23:03 -0500 Subject: [PATCH 06/27] Neural Network Revision Prototype complete --- Example/Pods/Pods.xcodeproj/project.pbxproj | 109 ++---- MLKit-PlayGround.playground/Contents.swift | 333 +++++++++++++++--- .../timeline.xctimeline | 7 +- MLKit/Classes/ANN/HiddenLayer.swift | 150 -------- MLKit/Classes/ANN/InputLayer.swift | 92 ----- MLKit/Classes/ANN/Layer.swift | 182 ++++++++++ MLKit/Classes/ANN/LayerProtocol.swift .swift | 22 -- .../ANN/Learning/ActivationFunctionEnum.swift | 20 -- MLKit/Classes/ANN/Learning/Adaline.swift | 14 - .../ANN/Learning/BackPropagation.swift | 241 ------------- MLKit/Classes/ANN/Learning/NNOperations.swift | 128 ------- MLKit/Classes/ANN/Learning/Perceptron.swift | 14 - MLKit/Classes/ANN/Learning/Training.swift | 217 ------------ .../Classes/ANN/Learning/TrainingTypes.swift | 34 -- MLKit/Classes/ANN/NeuralNet.swift | 259 -------------- MLKit/Classes/ANN/NeuralNetwork.swift | 158 +++++++++ MLKit/Classes/ANN/Neuron.swift | 40 --- MLKit/Classes/ANN/OutputLayer.swift | 91 ----- 18 files changed, 654 insertions(+), 1457 deletions(-) delete mode 100644 MLKit/Classes/ANN/HiddenLayer.swift delete mode 100644 MLKit/Classes/ANN/InputLayer.swift create mode 100644 MLKit/Classes/ANN/Layer.swift delete mode 100644 MLKit/Classes/ANN/LayerProtocol.swift .swift delete mode 100644 MLKit/Classes/ANN/Learning/ActivationFunctionEnum.swift delete mode 100644 MLKit/Classes/ANN/Learning/Adaline.swift delete mode 100644 MLKit/Classes/ANN/Learning/BackPropagation.swift delete mode 100644 MLKit/Classes/ANN/Learning/NNOperations.swift delete mode 100644 MLKit/Classes/ANN/Learning/Perceptron.swift delete mode 100644 MLKit/Classes/ANN/Learning/Training.swift delete mode 100644 MLKit/Classes/ANN/Learning/TrainingTypes.swift delete mode 100644 MLKit/Classes/ANN/NeuralNet.swift create mode 100644 MLKit/Classes/ANN/NeuralNetwork.swift delete mode 100644 MLKit/Classes/ANN/Neuron.swift delete mode 100644 MLKit/Classes/ANN/OutputLayer.swift diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 2b7db62..46da9d5 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -18,14 +18,11 @@ 123D36BB9CA549C55BBE6FC7D21BAB97 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 538A45E8224CD67C4262A9B8B8F1F37D /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 15B880A364E4467B8496FB49A27371AA /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B964EBE2CDB51FDD20A12FCFCB2CA92 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; 18F58A2CDEFED6B5617F4944FC84DBEE /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = CECAF283BF4E0E908EDD2145F46A956C /* XCTestSuite+QuickTestSuiteBuilder.m */; }; - 19910A844C4F2E529D19AB307FFBCAC7 /* NeuralNet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CD9908844E6289F25B33B76D661F910 /* NeuralNet.swift */; }; 1C37D984F1BBBC7278E1FB6BDB153892 /* CwlCatchBadInstruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC4FF748D013369FE77FEB13FA517D2 /* CwlCatchBadInstruction.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 1D766EE454F206D5D9AE2163784CF6FC /* Perceptron.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6445F60FE57F75586E5913E05E92441A /* Perceptron.swift */; }; 1F707004C05C63F90F0030E8E4902D66 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC69007AFC0A65564291043D24B15E3D /* BeLessThanOrEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 20C32450383B494CC9EF7F3072369EE0 /* Pods-MLKit_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A6F138A9EBF54B5A06DCE9CD171D6071 /* Pods-MLKit_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2173F4681D2DDDF63A01A7439EDE1FD4 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 460AA53800E69CBD26BBD78537857F1E /* NMBObjCMatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 2211BD314546EEC0AB7B56FC3A45B4E5 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 761E70C09096AF7E9F07C0940571D8E8 /* XCTest.framework */; }; - 26A3DFBD9271C5F76EC35201D1048E5F /* Neuron.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83D8C7F72D654D31C25D4CC5703B897C /* Neuron.swift */; }; 288DBE855F794BA1AE8BC47AA413693E /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26788572C6F366401AFEC63C14A45513 /* BeginWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 2DF80575B9759A9E8004F4F642D0D123 /* ContainElementSatisfying.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4891C3E0E5A4953C1B99E8D3D29EE77 /* ContainElementSatisfying.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 3068D78E8F744939B04CA6B03D3380AA /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = E676FEA2024624A7035E564D4FD4C518 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -55,7 +52,6 @@ 4F771B1F858E7FF60B5272E77A228731 /* TensorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C9E249A32DD13B27BA05B3CDE01B22E /* TensorType.swift */; }; 4FDFB4587C55A09C0A2E3A3780568B54 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 02862E2FB988A3D26C860CD548A14BEB /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; 508E5B8353068B37CA6F40E3D7B89D42 /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9624E19BE6F7377A79FB879764B1B1DE /* Closures.swift */; }; - 50C5B91FE25D361A85C0DDD1B4AFCA97 /* Adaline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28230F7A0883AEAAC5AA0A1F5A9D4D52 /* Adaline.swift */; }; 5685322E421AB4DA6A91B26C09833B29 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = E429FE9C8505AE999927833503F9CB86 /* BeIdenticalTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 56E55355678E5D3CCC6C92F54D612C44 /* QuadraticType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 494C0F635D5836E872EF3C5A39E97D40 /* QuadraticType.swift */; }; 59667A95671EEAF87FA2272CE0B01451 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = E3118F695CEE1A70F01A9E795A35D87A /* QCKDSL.m */; }; @@ -75,7 +71,6 @@ 74534A7B8A7904903E206702029453C8 /* QuickSpecBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D128A10EA2E300A21235B91F63A2AA3 /* QuickSpecBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; 748BB746CA429F9C5D510EEF3245ECFD /* Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DBD0EB0CE3764BD0D10DF460F60B14F7 /* Nimble-dummy.m */; }; 76DE9965F967C929E23496C9190552D7 /* BiologicalProcessManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37EB00DB3008F53F0434B5613FBC4C53 /* BiologicalProcessManager.swift */; }; - 7944F27F56E31EC0ACE39BBC5C2504D8 /* ActivationFunctionEnum.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3646C0A4E9265CF59C37A69AAC866CD /* ActivationFunctionEnum.swift */; }; 79D372BBA24A59BCE017C0390739789B /* Interval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93BD78CE597862CCAAF3A214DF9A8D46 /* Interval.swift */; }; 7BA253257934CFE972B3B93DA0E54A13 /* SimpleLinearRegression.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF522F03C4D4A099193666B4BCCC3EC1 /* SimpleLinearRegression.swift */; }; 7BD907A708031D5361E1A97CACF9F24E /* Nimble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 162303716510B6A1AC25BFD0F74F2544 /* Nimble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -91,7 +86,6 @@ 89842671BEE6483B22D5D8440D46CBE2 /* Upsurge-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C36512E8311F1878F954D885D3EF9B /* Upsurge-dummy.m */; }; 8995462F1A16CFB4BB4B376A1DE531EA /* NSString+C99ExtendedIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79862A111E88CCA41E254825B0A2B523 /* NSString+C99ExtendedIdentifier.swift */; }; 89BE38D68258AD1FFAB150CCCBD6DFFE /* LinearType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AB15E15A6C417380F4BDE4F104E73FA /* LinearType.swift */; }; - 8B28F52707F686189C4FF86336BED8E1 /* TrainingTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12366F5A28306734A313F3975B44D367 /* TrainingTypes.swift */; }; 8BD1AC3E151D5A7653D9FEE455391C6B /* Real.swift in Sources */ = {isa = PBXBuildFile; fileRef = B05A2B00A7660C87F990F90901BB61C2 /* Real.swift */; }; 8D58BCC6313D5B78B6C472083CC1C3AF /* 2DTensorSlice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C13EEF6CE7B8665E06332AD77882466 /* 2DTensorSlice.swift */; }; 8E00B22C6FE14FEF9B828106A8B1622F /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = 64BEBE3A1D4FF0196925EEA64015469B /* World.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -101,7 +95,8 @@ 931A3BED40D559A81F5167CFAB56D3A5 /* CSVReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 622324B170D9D4EAB905996D74DBC373 /* CSVReader.swift */; }; 96154D504405D81853EF3326A10CA05C /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7D069980D480A434318340B49416C2C /* World.swift */; }; 962A1AAA808E92DC65244AFE9501295C /* ValueArraySlice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19D06F6EACA4C3A8FB660F983B8C2500 /* ValueArraySlice.swift */; }; - 96637FC87F06B7CA2F9613AA7986D4F2 /* NNOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D28E4FD8BC290EE2DF8062B79E858E6 /* NNOperations.swift */; }; + 9A77E7AD1E96E26600C4D8BA /* NeuralNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A77E7AC1E96E26600C4D8BA /* NeuralNetwork.swift */; }; + 9A77E7AF1E96E31B00C4D8BA /* Layer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A77E7AE1E96E31B00C4D8BA /* Layer.swift */; }; 9B10C0FDE7497E14ECCD735C0D13ECBC /* MatrixSlice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674822B4E356741B78B38B007C88BB9C /* MatrixSlice.swift */; }; 9D9155396F48333B854DBE586138EDBF /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60979E4BD68DB0DE4501D0BCC7234D91 /* NMBExpectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; 9E89BAB7963E6327D38AA493C3FD856A /* Genome.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B3B25CE2099F033BEE06C3BAD98E751 /* Genome.swift */; }; @@ -129,7 +124,6 @@ B5636367653C58A6B20949A578317BE8 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9AEF9A30B4EAA4E623AC004398637120 /* MapKit.framework */; }; B612F1F906E3AF8B1FC6B893229E83B6 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA483EF72520B01CF4A81ED38901CC64 /* AssertionRecorder.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; B6EC13F8CB68644BD9886B003BA6900C /* Arithmetic.swift in Sources */ = {isa = PBXBuildFile; fileRef = D24FCB1F18D8CD9497E67BE1BC119854 /* Arithmetic.swift */; }; - B756FD631E2AF33F50050C7EB10069C7 /* InputLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5719043BEEEAC9B415BF36B8C14EC486 /* InputLayer.swift */; }; BA62865F4E3212AE75CD8EF9150B32F0 /* Population.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99460984C73229E22633921A1D4DD6DF /* Population.swift */; }; BCCBC7CED6FB9D71D85D8044B209B09A /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 711A9AC0701A2E08E65DD82429B871BA /* ExampleGroup.swift */; }; BD782803F394A708E7D3223EBDE31C95 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A6452D2CC7C17DD01ECD91742AF746F /* DSL.swift */; }; @@ -143,12 +137,9 @@ C97B9F51427BCD4C63EC7D75AB161833 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95FD3F8CEA2A60510B93CE50FFDAEC43 /* Contain.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; C9AAE13CC11B5370479EA08F706EA61F /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA8E6B68CD5B9186B6EC6647BF81A356 /* HooksPhase.swift */; }; CE5A08D84128D55187606154E5DBE72D /* Upsurge-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5480FBA1F6D203291F193F6D19878DBA /* Upsurge-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CFDD8E224B4E973A73E00FCE0BC51D19 /* OutputLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF70CC1117A6FB08201FDDB1CB266D6C /* OutputLayer.swift */; }; D0049FF0F7A1B7D2432ABEE038CD8890 /* MachineLearningKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5ECF49E5836E9754AAF942842CE1B960 /* MachineLearningKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0E61450A2042ACA5849C5F62720BF88 /* Training.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E0557ADBBA3D7B968ACB54715F8C5B4 /* Training.swift */; }; D45F4BA5D809FEEACBB4A752920EAEA0 /* Upsurge.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29E88E2BB63028C27C1E53746F101DF7 /* Upsurge.framework */; }; D5D4E8223C271A19448FCEAC36A9B441 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7738AD08C39FE55EBEED43F72217AD23 /* AdapterProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - D65D3D915B692F53F29BF10FBFDDC8EC /* BackPropagation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E4FFF51329BC9B1183F468ED0D3F0B4 /* BackPropagation.swift */; }; D6A1634CFD5243D18DB762116C8CEF8F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27B970E9789C66FDD4D00112E12E321A /* BeVoid.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; D7408861438442F67469ACE39D1604C1 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 985F35A8C7BB37C0852C7E45F32619DA /* BeCloseTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; D93C5A1929F8FD53F7EF2C3CA16CCC95 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC2B937DBAE6CC4BCEE683AA80588DC7 /* Expectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; @@ -161,7 +152,6 @@ DEF289C7BF4E97D42B06B1EB7CAE0951 /* CwlCatchException.h in Headers */ = {isa = PBXBuildFile; fileRef = 50F4D75F4A1D2B2E24633488475931A3 /* CwlCatchException.h */; settings = {ATTRIBUTES = (Public, ); }; }; E1554E6ED22E94CAD97E211C7FBA530B /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD25694F61A3303C6994E49FD926F60C /* MatcherProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; E2B4416F12F2754E0897FA3EA5A0177B /* MachineLearningKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D60404BA78CC7BF6C1144F008DDDDBC /* MachineLearningKit-dummy.m */; }; - E6C8F28209B49A37CDAA186AB95009D4 /* HiddenLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E051C80B62918A5D9DD916E1A32300F3 /* HiddenLayer.swift */; }; E9CD7EF9DD6E75404E4264F6F0AC8D26 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CFC980E2966F69FA4D771EB69B2072A /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; E9D624FE0FBEB13A17DF3CA43D94E8A9 /* FFT.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8696FA5715205A2FE823260539588590 /* FFT.swift */; }; EEACC5B78AFB71C8594380C005C17A4B /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = 38FE998DBDEEBCE33949AAA9F3296550 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; @@ -174,7 +164,6 @@ F6947DC02F61303F74AF8602F1A1BE68 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8F95C5A721744403DDF5D71E3B20A06 /* NSBundle+CurrentTestBundle.swift */; }; F863E54F759068A89CD87B9121C7F6A0 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68FA4E20FBA69E54B8641FB7E2A67324 /* Configuration.swift */; }; F96CD569B97BF947F19270C6C1D0FA23 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0841731251EEDE7ACA21267B1A8A673F /* ErrorUtility.swift */; }; - FAA38D3E44157CD9C0512A4FCD6C5A27 /* LayerProtocol.swift .swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C898338DFE7E67CC7FBEFB93655AD02 /* LayerProtocol.swift .swift */; }; FAACCCDBE0D2785212E37468636AAB0A /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 424CEA9DC77FE5D725C9551F2ACAA8BA /* AllPass.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; FD9373DD3C1910FB513089F4CD39613B /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CD84A26A08B3EC263D565FE02D7940 /* RaisesException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; FDC2EA4BB18793AED748BC5A8733EC1B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15E689FA8F35DA0540DAED36BA321F6E /* Foundation.framework */; }; @@ -231,17 +220,15 @@ 07FB5885E183C905F1B353BA590212F0 /* HaveCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HaveCount.swift; path = Sources/Nimble/Matchers/HaveCount.swift; sourceTree = ""; }; 0841731251EEDE7ACA21267B1A8A673F /* ErrorUtility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErrorUtility.swift; path = Sources/Quick/ErrorUtility.swift; sourceTree = ""; }; 0874FE88223748474F9540CC3A7B2CDD /* DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DSL.h; path = Sources/NimbleObjectiveC/DSL.h; sourceTree = ""; }; - 08D39735D7DBDB3A52B19BB1A1BEAD08 /* Pods-MLKit_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-MLKit_Example.modulemap"; sourceTree = ""; }; + 08D39735D7DBDB3A52B19BB1A1BEAD08 /* Pods-MLKit_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MLKit_Example.modulemap"; sourceTree = ""; }; 0912AB47C2FD8B724C2FF78EB04DA146 /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Sources/Nimble/DSL.swift; sourceTree = ""; }; 0AB6F2F34E76936E5DCD781D737E8D0E /* Tensor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Tensor.swift; path = Source/ND/Tensor.swift; sourceTree = ""; }; 0B3B25CE2099F033BEE06C3BAD98E751 /* Genome.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Genome.swift; sourceTree = ""; }; 0C3B0FE4A67C53BAE82ACF00A907244A /* LinearOperators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinearOperators.swift; path = Source/1D/LinearOperators.swift; sourceTree = ""; }; - 0CD9908844E6289F25B33B76D661F910 /* NeuralNet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NeuralNet.swift; sourceTree = ""; }; 0D765DA753FAB21A06C81689DCF49863 /* SuiteHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuiteHooks.swift; path = Sources/Quick/Hooks/SuiteHooks.swift; sourceTree = ""; }; 0EB98267420E501E4F7B0573E2C5F96F /* QuickConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickConfiguration.m; path = Sources/QuickObjectiveC/Configuration/QuickConfiguration.m; sourceTree = ""; }; 0FB8099238DE7DDCFE3FE4C07E86CF1E /* ExampleHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleHooks.swift; path = Sources/Quick/Hooks/ExampleHooks.swift; sourceTree = ""; }; 1210BE3C711459C58AE9F743F7B82931 /* ComplexArrayRealSlice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComplexArrayRealSlice.swift; path = Source/Complex/ComplexArrayRealSlice.swift; sourceTree = ""; }; - 12366F5A28306734A313F3975B44D367 /* TrainingTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TrainingTypes.swift; sourceTree = ""; }; 124FF2A96FE15393763BC63572EEC184 /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Sources/Nimble/Nimble.h; sourceTree = ""; }; 13CD84A26A08B3EC263D565FE02D7940 /* RaisesException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RaisesException.swift; path = Sources/Nimble/Matchers/RaisesException.swift; sourceTree = ""; }; 15E689FA8F35DA0540DAED36BA321F6E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; @@ -249,9 +236,8 @@ 16D03C36A6892F0A0BA80E3B43181599 /* QuickConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickConfiguration.h; path = Sources/QuickObjectiveC/Configuration/QuickConfiguration.h; sourceTree = ""; }; 19D06F6EACA4C3A8FB660F983B8C2500 /* ValueArraySlice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueArraySlice.swift; path = Source/1D/ValueArraySlice.swift; sourceTree = ""; }; 1C9E249A32DD13B27BA05B3CDE01B22E /* TensorType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TensorType.swift; path = Source/ND/TensorType.swift; sourceTree = ""; }; - 1CA1E0D7EDD11FD11C55B7AC425EA02C /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Quick.framework; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1CA1E0D7EDD11FD11C55B7AC425EA02C /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1CFC980E2966F69FA4D771EB69B2072A /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Sources/NimbleObjectiveC/NMBExceptionCapture.h; sourceTree = ""; }; - 1D28E4FD8BC290EE2DF8062B79E858E6 /* NNOperations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NNOperations.swift; sourceTree = ""; }; 2002FFD090C435360F60A33E88C41DBB /* Pods-MLKit_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MLKit_Tests-acknowledgements.markdown"; sourceTree = ""; }; 20BF642EFEB79518E353D7F8F3D860F1 /* mach_excServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mach_excServer.h; path = Sources/Lib/CwlPreconditionTesting/CwlPreconditionTesting/mach_excServer.h; sourceTree = ""; }; 227DDFCD5D9F3918AB624B74E886C8A5 /* BeLogical.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLogical.swift; path = Sources/Nimble/Matchers/BeLogical.swift; sourceTree = ""; }; @@ -259,8 +245,7 @@ 256AA66B0C109C259E2D0DDA42B32EDB /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Sources/Nimble/Utils/Async.swift; sourceTree = ""; }; 26788572C6F366401AFEC63C14A45513 /* BeginWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWith.swift; path = Sources/Nimble/Matchers/BeginWith.swift; sourceTree = ""; }; 27B970E9789C66FDD4D00112E12E321A /* BeVoid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeVoid.swift; path = Sources/Nimble/Matchers/BeVoid.swift; sourceTree = ""; }; - 28230F7A0883AEAAC5AA0A1F5A9D4D52 /* Adaline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Adaline.swift; sourceTree = ""; }; - 289B26827495B1EA15C10A9AFE473C7A /* Upsurge.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Upsurge.framework; path = Upsurge.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 289B26827495B1EA15C10A9AFE473C7A /* Upsurge.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Upsurge.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 29E88E2BB63028C27C1E53746F101DF7 /* Upsurge.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Upsurge.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 2C176355D2DA1EB17207AE84594804D6 /* Pods-MLKit_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MLKit_Tests-resources.sh"; sourceTree = ""; }; 2D3E3057A07EA15E4008F933E8752DD2 /* URL+FileName.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+FileName.swift"; path = "Sources/Quick/URL+FileName.swift"; sourceTree = ""; }; @@ -279,7 +264,6 @@ 3C9A0B54C6BC094E3CD3A2A61EDA9D85 /* MatchError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatchError.swift; path = Sources/Nimble/Matchers/MatchError.swift; sourceTree = ""; }; 3D34DA76C844CF16C054BA1344541C74 /* Pods-MLKit_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MLKit_Example-resources.sh"; sourceTree = ""; }; 3D5025AF8F620B99C3283F0975D09FE3 /* Pods-MLKit_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MLKit_Example-dummy.m"; sourceTree = ""; }; - 3E0557ADBBA3D7B968ACB54715F8C5B4 /* Training.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Training.swift; sourceTree = ""; }; 3EB4893036DEB2A1EB8B6111A120F5A2 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAnInstanceOf.swift; path = Sources/Nimble/Matchers/BeAnInstanceOf.swift; sourceTree = ""; }; 40FFCF7710FDE9792C5747C276F2DF4F /* CwlCatchException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCatchException.swift; path = Sources/Lib/CwlPreconditionTesting/CwlCatchException/CwlCatchException/CwlCatchException.swift; sourceTree = ""; }; 424CEA9DC77FE5D725C9551F2ACAA8BA /* AllPass.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllPass.swift; path = Sources/Nimble/Matchers/AllPass.swift; sourceTree = ""; }; @@ -296,10 +280,8 @@ 55F8E5E39CFFED8C8B0162606918FB20 /* MachineLearningKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MachineLearningKit.xcconfig; sourceTree = ""; }; 564EE9F32DE4725529A52326B19EA90F /* ThrowAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowAssertion.swift; path = Sources/Nimble/Matchers/ThrowAssertion.swift; sourceTree = ""; }; 56C0D020BB9A8FA4BD0F26AC76A2E14A /* DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DSL.m; path = Sources/NimbleObjectiveC/DSL.m; sourceTree = ""; }; - 57189BBB8E0A886933E15F0E294E2908 /* Pods_MLKit_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_MLKit_Tests.framework; path = "Pods-MLKit_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 5719043BEEEAC9B415BF36B8C14EC486 /* InputLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = InputLayer.swift; sourceTree = ""; }; - 5CEECA1264E2048F119396D446D14C91 /* mach_excServer.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mach_excServer.c; path = Sources/Lib/CwlPreconditionTesting/CwlPreconditionTesting/mach_excServer.c; sourceTree = ""; }; - 5E4FFF51329BC9B1183F468ED0D3F0B4 /* BackPropagation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BackPropagation.swift; sourceTree = ""; }; + 57189BBB8E0A886933E15F0E294E2908 /* Pods_MLKit_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MLKit_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5CEECA1264E2048F119396D446D14C91 /* mach_excServer.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mach_excServer.c; path = Sources/Lib/CwlPreconditionTesting/CwlPreconditionTesting/mach_excServer.c; sourceTree = ""; }; 5ECF49E5836E9754AAF942842CE1B960 /* MachineLearningKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MachineLearningKit-umbrella.h"; sourceTree = ""; }; 6030DF38EBDBF336FFAE0120EEA4D959 /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Sources/Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; 60979E4BD68DB0DE4501D0BCC7234D91 /* NMBExpectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMBExpectation.swift; path = Sources/Nimble/Adapters/NMBExpectation.swift; sourceTree = ""; }; @@ -308,7 +290,6 @@ 632231BFC26E16C229D32687B917D3A0 /* Trigonometric.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Trigonometric.swift; path = Source/Operations/Trigonometric.swift; sourceTree = ""; }; 636673BDA1F06E469643F565D84270B5 /* Pods-MLKit_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MLKit_Example.debug.xcconfig"; sourceTree = ""; }; 6399E2F1241CE723D578C761B9315C2B /* PolynomialRegression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolynomialRegression.swift; sourceTree = ""; }; - 6445F60FE57F75586E5913E05E92441A /* Perceptron.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Perceptron.swift; sourceTree = ""; }; 64BEBE3A1D4FF0196925EEA64015469B /* World.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = World.h; path = Sources/QuickObjectiveC/World.h; sourceTree = ""; }; 674822B4E356741B78B38B007C88BB9C /* MatrixSlice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatrixSlice.swift; path = Source/2D/MatrixSlice.swift; sourceTree = ""; }; 67BD782939C66E9C3619A77243519BF6 /* QuickSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpec.m; path = Sources/QuickObjectiveC/QuickSpec.m; sourceTree = ""; }; @@ -322,9 +303,7 @@ 7738AD08C39FE55EBEED43F72217AD23 /* AdapterProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdapterProtocols.swift; path = Sources/Nimble/Adapters/AdapterProtocols.swift; sourceTree = ""; }; 79862A111E88CCA41E254825B0A2B523 /* NSString+C99ExtendedIdentifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSString+C99ExtendedIdentifier.swift"; path = "Sources/Quick/NSString+C99ExtendedIdentifier.swift"; sourceTree = ""; }; 79CCB2C7966BFB9D5D2C995C71C41E7D /* DataManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DataManager.swift; sourceTree = ""; }; - 7C898338DFE7E67CC7FBEFB93655AD02 /* LayerProtocol.swift .swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "LayerProtocol.swift .swift"; sourceTree = ""; }; 7CCCA0D5F8BB724A0B342E39C887F56C /* Match.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Match.swift; path = Sources/Nimble/Matchers/Match.swift; sourceTree = ""; }; - 83D8C7F72D654D31C25D4CC5703B897C /* Neuron.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Neuron.swift; sourceTree = ""; }; 851E4FB881FC4ED5D39D0CBCB7DAA845 /* BeEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeEmpty.swift; path = Sources/Nimble/Matchers/BeEmpty.swift; sourceTree = ""; }; 8696FA5715205A2FE823260539588590 /* FFT.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FFT.swift; path = Source/DSP/FFT.swift; sourceTree = ""; }; 895545B440ABA73C074838125D4DDCD5 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Quick/Filter.swift; sourceTree = ""; }; @@ -332,13 +311,13 @@ 8AB15E15A6C417380F4BDE4F104E73FA /* LinearType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LinearType.swift; path = Source/1D/LinearType.swift; sourceTree = ""; }; 8B964EBE2CDB51FDD20A12FCFCB2CA92 /* Quick.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Quick.h; path = Sources/QuickObjectiveC/Quick.h; sourceTree = ""; }; 8BC505A053298F63159996DE683D55D5 /* LassoRegression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LassoRegression.swift; sourceTree = ""; }; - 8D5D6E6E6D3B6CCBD5B8D01D78A6C3A1 /* MachineLearningKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MachineLearningKit.framework; path = MachineLearningKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8D5D6E6E6D3B6CCBD5B8D01D78A6C3A1 /* MachineLearningKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MachineLearningKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8E2478F9C2B8F6A4FD3E290EB66D2967 /* NimbleEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleEnvironment.swift; path = Sources/Nimble/Adapters/NimbleEnvironment.swift; sourceTree = ""; }; 8F643B28D12D7235D05A86D94E704075 /* CwlDarwinDefinitions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlDarwinDefinitions.swift; path = Sources/Lib/CwlPreconditionTesting/CwlPreconditionTesting/CwlDarwinDefinitions.swift; sourceTree = ""; }; 904FEA0622628AADB1CA02AA57ED1A48 /* TensorSlice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TensorSlice.swift; path = Source/ND/TensorSlice.swift; sourceTree = ""; }; 918BC97B218D0A8A64BDD621B91F9069 /* Upsurge-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Upsurge-prefix.pch"; sourceTree = ""; }; 922D9654CE04819948A343CA3B1429F3 /* CwlCatchException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlCatchException.m; path = Sources/Lib/CwlPreconditionTesting/CwlCatchException/CwlCatchException/CwlCatchException.m; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 93BD78CE597862CCAAF3A214DF9A8D46 /* Interval.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Interval.swift; path = Source/Types/Interval.swift; sourceTree = ""; }; 94F560C6B000B2C3D6E49CCFD3562B68 /* MachineLearningKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MachineLearningKit-prefix.pch"; sourceTree = ""; }; 95FD3F8CEA2A60510B93CE50FFDAEC43 /* Contain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contain.swift; path = Sources/Nimble/Matchers/Contain.swift; sourceTree = ""; }; @@ -349,6 +328,8 @@ 99460984C73229E22633921A1D4DD6DF /* Population.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Population.swift; sourceTree = ""; }; 9951688C60A46DD572589F5DACF0C4A5 /* Pods-MLKit_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MLKit_Example-umbrella.h"; sourceTree = ""; }; 99A3B4EC6DA19FEADCCDCA96CA327574 /* Span.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Span.swift; path = Source/ND/Span.swift; sourceTree = ""; }; + 9A77E7AC1E96E26600C4D8BA /* NeuralNetwork.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NeuralNetwork.swift; sourceTree = ""; }; + 9A77E7AE1E96E31B00C4D8BA /* Layer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Layer.swift; sourceTree = ""; }; 9AEF9A30B4EAA4E623AC004398637120 /* MapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MapKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/MapKit.framework; sourceTree = DEVELOPER_DIR; }; 9C13EEF6CE7B8665E06332AD77882466 /* 2DTensorSlice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = 2DTensorSlice.swift; path = Source/2D/2DTensorSlice.swift; sourceTree = ""; }; 9C6B6A08749A762D9174E03E4409BD8E /* Pods-MLKit_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MLKit_Example-frameworks.sh"; sourceTree = ""; }; @@ -371,28 +352,27 @@ B9D3FED038BE3338641A141732755B00 /* QuickSpecBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpecBase.m; path = Sources/QuickSpecBase/QuickSpecBase.m; sourceTree = ""; }; BA8E6B68CD5B9186B6EC6647BF81A356 /* HooksPhase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HooksPhase.swift; path = Sources/Quick/Hooks/HooksPhase.swift; sourceTree = ""; }; BA9401876190B7BA1B70B7A9752180D5 /* CurrentTestCaseTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CurrentTestCaseTracker.h; path = Sources/NimbleObjectiveC/CurrentTestCaseTracker.h; sourceTree = ""; }; - BC1FE7307C927E1E6A92842F57E0C7C9 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Nimble.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BC1FE7307C927E1E6A92842F57E0C7C9 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BE29DF31652B34FA490E23487B83FBEE /* QuickSelectedTestSuiteBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickSelectedTestSuiteBuilder.swift; path = Sources/Quick/QuickSelectedTestSuiteBuilder.swift; sourceTree = ""; }; BF522F03C4D4A099193666B4BCCC3EC1 /* SimpleLinearRegression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SimpleLinearRegression.swift; sourceTree = ""; }; C00D1260FC691D4C91B5C7B0C1E51CED /* Exponential.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Exponential.swift; path = Source/Operations/Exponential.swift; sourceTree = ""; }; C0CED4BACCDE5B346DA1AF62EB6AF781 /* MatcherFunc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherFunc.swift; path = Sources/Nimble/Matchers/MatcherFunc.swift; sourceTree = ""; }; C17505640C9782BB9C72471DFBF96025 /* Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-prefix.pch"; sourceTree = ""; }; C3523CB10A94DA7970870A6190C1CB1C /* Quick-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-umbrella.h"; sourceTree = ""; }; - C3646C0A4E9265CF59C37A69AAC866CD /* ActivationFunctionEnum.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ActivationFunctionEnum.swift; sourceTree = ""; }; C77F9745A1AEE0419DE285232F7A4B46 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThanOrEqualTo.swift; path = Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift; sourceTree = ""; }; - C7E15AEC4FF3B6933962B82D62626FC0 /* Pods-MLKit_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-MLKit_Tests.modulemap"; sourceTree = ""; }; + C7E15AEC4FF3B6933962B82D62626FC0 /* Pods-MLKit_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MLKit_Tests.modulemap"; sourceTree = ""; }; CA483EF72520B01CF4A81ED38901CC64 /* AssertionRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionRecorder.swift; path = Sources/Nimble/Adapters/AssertionRecorder.swift; sourceTree = ""; }; - CA785AB3A9A0B1FEB1F8D8297A1DEB72 /* Pods_MLKit_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_MLKit_Example.framework; path = "Pods-MLKit_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + CA785AB3A9A0B1FEB1F8D8297A1DEB72 /* Pods_MLKit_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MLKit_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CABE7AA02D1F045430D6A230BD3B4C19 /* ExampleMetadata.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleMetadata.swift; path = Sources/Quick/ExampleMetadata.swift; sourceTree = ""; }; - CAC74302C6BE8BE111885420D68AEFA2 /* MachineLearningKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = MachineLearningKit.modulemap; sourceTree = ""; }; - CACBB118DD81CDBEFB6559A57C883F50 /* Quick.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Quick.modulemap; sourceTree = ""; }; + CAC74302C6BE8BE111885420D68AEFA2 /* MachineLearningKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = MachineLearningKit.modulemap; sourceTree = ""; }; + CACBB118DD81CDBEFB6559A57C883F50 /* Quick.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Quick.modulemap; sourceTree = ""; }; CC69007AFC0A65564291043D24B15E3D /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThanOrEqual.swift; path = Sources/Nimble/Matchers/BeLessThanOrEqual.swift; sourceTree = ""; }; CC698E9958DEF380C0198EAA773F7DFF /* Pods-MLKit_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MLKit_Example.release.xcconfig"; sourceTree = ""; }; CD25694F61A3303C6994E49FD926F60C /* MatcherProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherProtocols.swift; path = Sources/Nimble/Matchers/MatcherProtocols.swift; sourceTree = ""; }; CE766189385F7E575AD7202D0316AFFC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; CE7B423E7D950D806D1D781D4D9FC8B1 /* QuickTestSuite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickTestSuite.swift; path = Sources/Quick/QuickTestSuite.swift; sourceTree = ""; }; CECAF283BF4E0E908EDD2145F46A956C /* XCTestSuite+QuickTestSuiteBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestSuite+QuickTestSuiteBuilder.m"; path = "Sources/QuickObjectiveC/XCTestSuite+QuickTestSuiteBuilder.m"; sourceTree = ""; }; - CFF92402EDA16EB6806DBA1684B4C0F0 /* Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Nimble.modulemap; sourceTree = ""; }; + CFF92402EDA16EB6806DBA1684B4C0F0 /* Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Nimble.modulemap; sourceTree = ""; }; D04D296FB2AE0035E8400F25EBD3EF4B /* Callsite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Callsite.swift; path = Sources/Quick/Callsite.swift; sourceTree = ""; }; D1601B2905CD07F5813DA81623EDCA6C /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncMatcherWrapper.swift; path = Sources/Nimble/Matchers/AsyncMatcherWrapper.swift; sourceTree = ""; }; D17AF65B06ED8A966DDAA320DDAE3508 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -407,7 +387,6 @@ DCBBD5A13ECC31F538E7CFD189D0DC70 /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAnyOf.swift; path = Sources/Nimble/Matchers/SatisfyAnyOf.swift; sourceTree = ""; }; DD78B0C12B597C5AADB88DE894863255 /* Pods-MLKit_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MLKit_Example-acknowledgements.plist"; sourceTree = ""; }; E0117B79C919D9B561E2A88CF83B7969 /* ThrowError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowError.swift; path = Sources/Nimble/Matchers/ThrowError.swift; sourceTree = ""; }; - E051C80B62918A5D9DD916E1A32300F3 /* HiddenLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HiddenLayer.swift; sourceTree = ""; }; E173D8DBF9F7B3031B549B2E0D20C12A /* BeLessThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThan.swift; path = Sources/Nimble/Matchers/BeLessThan.swift; sourceTree = ""; }; E2D5869169BD2131A228B383AB451505 /* Functional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Functional.swift; path = Sources/Nimble/Utils/Functional.swift; sourceTree = ""; }; E3118F695CEE1A70F01A9E795A35D87A /* QCKDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QCKDSL.m; path = Sources/QuickObjectiveC/DSL/QCKDSL.m; sourceTree = ""; }; @@ -422,9 +401,8 @@ EAC4FF748D013369FE77FEB13FA517D2 /* CwlCatchBadInstruction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCatchBadInstruction.swift; path = Sources/Lib/CwlPreconditionTesting/CwlPreconditionTesting/CwlCatchBadInstruction.swift; sourceTree = ""; }; EC2B937DBAE6CC4BCEE683AA80588DC7 /* Expectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expectation.swift; path = Sources/Nimble/Expectation.swift; sourceTree = ""; }; ED533B83CC472C5A00FECB4769AAC30A /* Nimble.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nimble.xcconfig; sourceTree = ""; }; - EDA0AC86CACECCE2595819A08D31B2BE /* Upsurge.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = Upsurge.modulemap; sourceTree = ""; }; + EDA0AC86CACECCE2595819A08D31B2BE /* Upsurge.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Upsurge.modulemap; sourceTree = ""; }; EDC143C76D629D8D454DC5D8AA30F893 /* ComplexArray.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ComplexArray.swift; path = Source/Complex/ComplexArray.swift; sourceTree = ""; }; - EF70CC1117A6FB08201FDDB1CB266D6C /* OutputLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OutputLayer.swift; sourceTree = ""; }; F4AA2FCE20C3F50B7669DC36BD5B9FD0 /* World+DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "World+DSL.h"; path = "Sources/QuickObjectiveC/DSL/World+DSL.h"; sourceTree = ""; }; F51B8F4F59EB42C9058BF2564443D938 /* MLKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MLKit.h; sourceTree = ""; }; F6C176A86FD62B15FEA0A36C68FCEBF8 /* PostNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PostNotification.swift; path = Sources/Nimble/Matchers/PostNotification.swift; sourceTree = ""; }; @@ -535,22 +513,15 @@ CECAF283BF4E0E908EDD2145F46A956C /* XCTestSuite+QuickTestSuiteBuilder.m */, BC003FE70FEB7D13ABECA4112A71C975 /* Support Files */, ); - name = Quick; path = Quick; sourceTree = ""; }; 0FAC186B2BBCC917ADED844EA3DE4733 /* ANN */ = { isa = PBXGroup; children = ( - E051C80B62918A5D9DD916E1A32300F3 /* HiddenLayer.swift */, - 5719043BEEEAC9B415BF36B8C14EC486 /* InputLayer.swift */, - 7C898338DFE7E67CC7FBEFB93655AD02 /* LayerProtocol.swift .swift */, - 0CD9908844E6289F25B33B76D661F910 /* NeuralNet.swift */, - 83D8C7F72D654D31C25D4CC5703B897C /* Neuron.swift */, - EF70CC1117A6FB08201FDDB1CB266D6C /* OutputLayer.swift */, - 7BC6C79B1F72DD4201BFC7AA7976D463 /* Learning */, - ); - name = ANN; + 9A77E7AC1E96E26600C4D8BA /* NeuralNetwork.swift */, + 9A77E7AE1E96E31B00C4D8BA /* Layer.swift */, + ); path = ANN; sourceTree = ""; }; @@ -597,7 +568,6 @@ 19D06F6EACA4C3A8FB660F983B8C2500 /* ValueArraySlice.swift */, A819A510A47562E3C92C1A44685374D7 /* Support Files */, ); - name = Upsurge; path = Upsurge; sourceTree = ""; }; @@ -608,7 +578,6 @@ A870F309CAC0CCB342388D4554562C3E /* Extensions.swift */, 02FE8673FE625152ED12629116F0948C /* MachineLeanringErrorEnum.swift */, ); - name = "Helper Classes & Extensions"; path = "Helper Classes & Extensions"; sourceTree = ""; }; @@ -619,7 +588,6 @@ 0B3B25CE2099F033BEE06C3BAD98E751 /* Genome.swift */, 99460984C73229E22633921A1D4DD6DF /* Population.swift */, ); - name = "Genetic Algorithms"; path = "Genetic Algorithms"; sourceTree = ""; }; @@ -628,25 +596,9 @@ children = ( 9616AB853B1C0D8D1727DBD8386E37FD /* KMeans.swift */, ); - name = "K Means Clustering"; path = "K Means Clustering"; sourceTree = ""; }; - 7BC6C79B1F72DD4201BFC7AA7976D463 /* Learning */ = { - isa = PBXGroup; - children = ( - C3646C0A4E9265CF59C37A69AAC866CD /* ActivationFunctionEnum.swift */, - 28230F7A0883AEAAC5AA0A1F5A9D4D52 /* Adaline.swift */, - 5E4FFF51329BC9B1183F468ED0D3F0B4 /* BackPropagation.swift */, - 1D28E4FD8BC290EE2DF8062B79E858E6 /* NNOperations.swift */, - 6445F60FE57F75586E5913E05E92441A /* Perceptron.swift */, - 3E0557ADBBA3D7B968ACB54715F8C5B4 /* Training.swift */, - 12366F5A28306734A313F3975B44D367 /* TrainingTypes.swift */, - ); - name = Learning; - path = Learning; - sourceTree = ""; - }; 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( @@ -697,7 +649,6 @@ 58BDD1AD33524DD8AC978BD0AF0F9511 /* K Means Clustering */, FE5411DC421921CF04845DC88628E15D /* Regression */, ); - name = Classes; path = Classes; sourceTree = ""; }; @@ -797,7 +748,6 @@ 38FE998DBDEEBCE33949AAA9F3296550 /* XCTestObservationCenter+Register.m */, 86A92A0E0B9EA4165121541D41E203EE /* Support Files */, ); - name = Nimble; path = Nimble; sourceTree = ""; }; @@ -888,7 +838,6 @@ children = ( 98A87DF51942B76D70730EFEA3FA5BA8 /* Classes */, ); - name = MLKit; path = MLKit; sourceTree = ""; }; @@ -909,7 +858,6 @@ 3A12C0E3001A5D20FD8C98EFFB3BD207 /* RidgeRegression.swift */, BF522F03C4D4A099193666B4BCCC3EC1 /* SimpleLinearRegression.swift */, ); - name = Regression; path = Regression; sourceTree = ""; }; @@ -1228,32 +1176,21 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7944F27F56E31EC0ACE39BBC5C2504D8 /* ActivationFunctionEnum.swift in Sources */, - 50C5B91FE25D361A85C0DDD1B4AFCA97 /* Adaline.swift in Sources */, - D65D3D915B692F53F29BF10FBFDDC8EC /* BackPropagation.swift in Sources */, 76DE9965F967C929E23496C9190552D7 /* BiologicalProcessManager.swift in Sources */, 931A3BED40D559A81F5167CFAB56D3A5 /* CSVReader.swift in Sources */, F1C3DA1C185CA6C61174BC255E9372F6 /* DataManager.swift in Sources */, FFB35D2F31B5E9604B9972940367F2E7 /* Extensions.swift in Sources */, 9E89BAB7963E6327D38AA493C3FD856A /* Genome.swift in Sources */, - E6C8F28209B49A37CDAA186AB95009D4 /* HiddenLayer.swift in Sources */, - B756FD631E2AF33F50050C7EB10069C7 /* InputLayer.swift in Sources */, 70121880DD090476FF2D85A257F7644C /* KMeans.swift in Sources */, A7A65DD22FFF2848B69FD57F86215716 /* LassoRegression.swift in Sources */, - FAA38D3E44157CD9C0512A4FCD6C5A27 /* LayerProtocol.swift .swift in Sources */, 7E6E10C02DFF79354646133DD3F7A335 /* MachineLeanringErrorEnum.swift in Sources */, E2B4416F12F2754E0897FA3EA5A0177B /* MachineLearningKit-dummy.m in Sources */, - 19910A844C4F2E529D19AB307FFBCAC7 /* NeuralNet.swift in Sources */, - 26A3DFBD9271C5F76EC35201D1048E5F /* Neuron.swift in Sources */, - 96637FC87F06B7CA2F9613AA7986D4F2 /* NNOperations.swift in Sources */, - CFDD8E224B4E973A73E00FCE0BC51D19 /* OutputLayer.swift in Sources */, - 1D766EE454F206D5D9AE2163784CF6FC /* Perceptron.swift in Sources */, 4E0A8331641CB0F7306B9FF7AA98E011 /* PolynomialRegression.swift in Sources */, BA62865F4E3212AE75CD8EF9150B32F0 /* Population.swift in Sources */, 88F99B90B78BE003CCD3CF0720219D3B /* RidgeRegression.swift in Sources */, + 9A77E7AF1E96E31B00C4D8BA /* Layer.swift in Sources */, 7BA253257934CFE972B3B93DA0E54A13 /* SimpleLinearRegression.swift in Sources */, - D0E61450A2042ACA5849C5F62720BF88 /* Training.swift in Sources */, - 8B28F52707F686189C4FF86336BED8E1 /* TrainingTypes.swift in Sources */, + 9A77E7AD1E96E26600C4D8BA /* NeuralNetwork.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/MLKit-PlayGround.playground/Contents.swift b/MLKit-PlayGround.playground/Contents.swift index 09eb9f0..c5af64b 100644 --- a/MLKit-PlayGround.playground/Contents.swift +++ b/MLKit-PlayGround.playground/Contents.swift @@ -3,82 +3,197 @@ import UIKit import Upsurge -// Feed Forward Implementation -class NeuralNetwork { - public var numberOfLayers: Int? - public var networkSize: [Int]? - public var bias: [Matrix]? - public var weights: [Matrix]? +extension Collection { + /// Return a copy of `self` with its elements shuffled + func shuffle() -> [Iterator.Element] { + var list = Array(self) + list.shuffle() + return list + } +} - init(size:[Int]){ +extension MutableCollection where Indices.Iterator.Element == Index { + /// Shuffles the contents of this collection. + mutating func shuffle() { + let c = count + guard c> 1 else { return } + + for (firstUnshuffled, unshuffledCount) in zip(indices, stride(from: c, to: 1, by: -1)) { + let d: IndexDistance = numericCast(arc4random_uniform(numericCast(unshuffledCount))) + guard d != 0 else { continue } + let i = index(firstUnshuffled, offsetBy: d) + swap(&self[firstUnshuffled], &self[i]) + } + } +} - self.numberOfLayers = size.count - self.networkSize = size +struct InputDataType { - self.bias = generateRandomBiases() + var data: [(input: [Float], target:[Float])] - self.weights = generateRandomWeights() + var lengthOfTrainingData: Int { + get { + return data.count + } } +} - // TODO: ERROR CHECKING - func generateRandomBiases() -> [Matrix] { - var biases: [Matrix] = [] - for i in stride(from: 1, to: networkSize!.count, by: 1) { +class Layer { - var bias: [Float] = [] - var length: Int = networkSize![i] - for j in 0..(rows: length, columns: 1, elements: biasAsValueArray) - biases.append(biasAsMatrix) - } + public var bias: Matrix? + + public var weights: Matrix? + + public var input: Matrix? + + public var zValues: Matrix? + + public var activationValues: Matrix? - return biases + public var Ξ”w: Matrix? + + public var Ξ”b: Matrix? + + public var activationFnc: Bool = false + + + init(size: (rows: Int, columns: Int)){ + + self.layerSize = size + + self.bias = generateRandomBiases() + + self.weights = generateRandomWeights() + + self.Ξ”b = Matrix([Array(repeating: 0.0, count: (self.bias?.elements.count)!)]) + + self.Ξ”w = Matrix([Array(repeating: 0.0, count: (self.weights?.elements.count)!)]) } - public func feedforward(activation:Matrix) -> Matrix { + public func fncStep(val: Float) -> Float { + return val>= 0 ? 1.0 : 0.0 + } + + + func forward(activation:Matrix) -> Matrix { var a = activation - for (b, w) in zip(self.bias!, self.weights!) { - a = (w * a) + b - a.elements.map(fncSigLog) + self.input = activation + + a = (self.weights! * a) + + a = Matrix(rows: a.rows, columns: a.columns, elements: a.elements + self.bias!.elements) + + self.zValues = a + + if activationFnc == true { + a = Matrix(rows: a.rows, columns: a.columns, elements: a.elements.map(fncStep)) + }else{ + a = Matrix(rows: a.rows, columns: a.columns, elements: a.elements.map(fncSigLog)) } + + self.activationValues = a + + return a } - func generateRandomWeights() -> [Matrix]{ - var pairs = zip(Array(networkSize![0...networkSize!.count-2]), Array(networkSize![1...networkSize!.count-1])) - var arrayOfWeights: [Matrix] = [] - for pair in pairs { - var numberOfWeightsInMatrix = pair.0 * pair.1 - var elements:[Float] = [] + func produceOuputError(cost: Matrix) -> Matrix { - for i in 1...numberOfWeightsInMatrix { - elements.append(generateRandomNumber()) - } + var z = self.zValues + + z = Matrix(rows: (z?.rows)!, columns: (z?.columns)!, elements:ValueArray(z!.elements.map(derivativeOfSigLog))) + + var sigmaPrime = z + + var Ξ” = cost * sigmaPrime! + + return Ξ” + } + + + func propagateError(previousLayerDelta: Matrix, nextLayer: Layer) -> Matrix { + + // Compute the current layers Ξ΄ value. + var nextLayerWeightTranspose = transpose(nextLayer.weights!) + + var deltaMultipliedBywT = nextLayerWeightTranspose * previousLayerDelta + + var sigmaPrime = Matrix(rows: (self.zValues?.rows)!, columns: (self.zValues?.columns)!, elements: ValueArray(self.zValues!.elements.map(derivativeOfSigLog))) + + var currentLayerDelta = Matrix(rows: deltaMultipliedBywT.rows, columns: deltaMultipliedBywT.columns, elements: ValueArray(deltaMultipliedBywT.elements * sigmaPrime.elements)) + + // Update the current layers weights + var inputTranspose = transpose(self.input!) + + var updatedWeights = currentLayerDelta * inputTranspose + + self.Ξ”w = updatedWeights + + // Update the current layers bias + self.Ξ”b = currentLayerDelta - var weights = Matrix(rows:pair.1, columns:pair.0, elements: elements) - arrayOfWeights.append(weights) + return currentLayerDelta + } + + + func updateWeights(miniBatchSize: Int, eta: Float){ + + var learningRate = eta/Float(miniBatchSize) + + var changeInWeights = learningRate * self.Ξ”w! + + var changedBiases = learningRate * self.Ξ”b! + + self.weights = self.weights! - changeInWeights + + self.bias = self.bias! - changedBiases + } + + // TODO: Make private method + func generateRandomBiases() -> Matrix { + + var biasValues: [Float] = [] + + for i in 0..(rows: (layerSize?.columns)!, columns: 1, elements: ValueArray(biasValues)) + } + + func generateRandomWeights() -> Matrix{ + var weightValues: [Float] = [] + + for i in 0..<(layersize!.rows * layerSize!.columns) { + var weightValue = generateRandomNumber() - return arrayOfWeights + weightValues.append(weightValue) + } + + + return Matrix(rows: layerSize!.columns, columns: layerSize!.rows, elements: ValueArray(weightValues)) } + /** + The generateRandomNumber generates a random number (normal distribution using Box-Muller tranform). + + - returns: A random number (normal distribution). + */ func generateRandomNumber() -> Float{ let u = Float(arc4random()) / Float(UINT32_MAX) let v = Float(arc4random()) / Float(UINT32_MAX) - let randomNum = sqrt(-2*log(u))*cos(Float(2) * Float(M_PI) * v) + let randomNum = sqrt( -2 * log(u) ) * cos( Float(2) * Float(M_PI) * v ) return randomNum } @@ -87,11 +202,120 @@ class NeuralNetwork { return 1.0 / (1.0 + exp(-val)) } + public func derivativeOfSigLog(val: Float) -> Float { + return fncSigLog(val: val) * (1.0 - fncSigLog(val: val)) + } + } + + + + + + + +// Feed Forward Implementation +class NeuralNetwork { + + public var layers: [Layer] = [] + public var numberOfLayers: Int? + public var networkSize: (inputLayerSize:Int, outputLayerSize:Int)? + + init(size:(Int, Int)){ + + self.networkSize = size + + } + + func addLayer(layer: Layer){ + + self.layers.append(layer) + } + + public func feedforward(input:Matrix) -> Matrix { + + var a = input + + for l in layers { + a = l.forward(activation: a) + } + + return a + } + + + public func SGD(trainingData: InputDataType, epochs: Int, miniBatchSize: Int, eta: Float, testData: InputDataType? = nil){ + + for i in 0..(rows: batch.input.count, columns: 1, elements: batch.input) + var outputMatrix = Matrix(rows: batch.target.count, columns: 1, elements: batch.target) + + self.backpropagate(input: inputMatrix, target: outputMatrix) + } + + for layer in layers { + + layer.updateWeights(miniBatchSize: miniBatch.lengthOfTrainingData, eta: eta) + + } + + } + + public func backpropagate(input: Matrix, target: Matrix){ + + // Feedforward + let feedForwardOutput = feedforward(input: input) + + // Output Error + let outputError = Matrix(rows: feedForwardOutput.rows, columns: feedForwardOutput.columns, elements: feedForwardOutput.elements - target.elements) + + // Output Layer Delta + var delta = layers.last?.produceOuputError(cost: outputError) + + // Set the change in weights and bias for the last layer + self.layers.last?.Ξ”b = delta + + var activationValuesforTheSecondToLastLayer = layers[layers.count-2].activationValues + + self.layers.last?.Ξ”w = delta! * transpose(activationValuesforTheSecondToLastLayer!) + + // Propogate error through each layer (except last) + for i in (0..(rows: 2, columns: 1, elements: [1.0,1.0]) -print(nn.feedforward(activation: a)) +var a = Matrix(rows: 2, columns: 1, elements: [2.0,10.0]) +var trainingData = InputDataType( data: [ ([0.0,0.0], [0.0]), ([1.0,1.0],[1.0]) ] ) +print(nn.weights?[0]) +print("\n") +print(Layer(size: (2,3)).generateRandomWeights()) +*/ + + /* var bias = nn.bias @@ -112,9 +336,22 @@ c.elements.map(nn.fncSigLog) */ - - - - +/* +var nn = NeuralNetwork(size: (2,1)) +nn.addLayer(layer: Layer(size: (2,3))) +nn.addLayer(layer: Layer(size: (3,1))) +var trainingData = InputDataType(data: [ ([0.0, 0.0], [0.0]), ([1.0, 1.0], [1.0]), ([1.0, 0.0], [0.0]), ([0.0, 1.0], [0.0])]) +var input1 = Matrix(rows: 2, columns: 1, elements: [0.0,0.0]) +var input2 = Matrix(rows: 2, columns: 1, elements: [0.0,1.0]) +var input3 = Matrix(rows: 2, columns: 1, elements: [1.0,0.0]) +var input4 = Matrix(rows: 2, columns: 1, elements: [1.0,1.0]) +nn.layers[0].activationFnc = false +nn.layers[1].activationFnc = true +nn.SGD(trainingData: trainingData, epochs: 200, miniBatchSize: 3, eta: 0.5) +print(nn.feedforward(input: input1)) +print(nn.feedforward(input: input2)) +print(nn.feedforward(input: input3)) +print(nn.feedforward(input: input4)) +*/ diff --git a/MLKit-PlayGround.playground/timeline.xctimeline b/MLKit-PlayGround.playground/timeline.xctimeline index fc6586c..928efb4 100644 --- a/MLKit-PlayGround.playground/timeline.xctimeline +++ b/MLKit-PlayGround.playground/timeline.xctimeline @@ -3,7 +3,12 @@ version = "3.0"> + + diff --git a/MLKit/Classes/ANN/HiddenLayer.swift b/MLKit/Classes/ANN/HiddenLayer.swift deleted file mode 100644 index 81b873a..0000000 --- a/MLKit/Classes/ANN/HiddenLayer.swift +++ /dev/null @@ -1,150 +0,0 @@ -// -// HiddenLayer.swift -// Pods -// -// Created by Guled on 2/23/17. -// -// -// Architecture of the code inspired by FΓ‘bio M. Soares and Alan M.F Souza's implementation of a Neural Network - -// in their book Neural Network Programming in Java. - -import Foundation -import Upsurge - -/// The HiddenLayer class represents the hidden layer of a NueralNet object. -public class HiddenLayer: Layer { - - fileprivate var _listOfNeurons: [Neuron]! - fileprivate var _numberOfNeuronsInLayer: Int! - - /// List of neurons associated with a particular hidden layer - public var listOfNeurons: [Neuron] { - - get { - return _listOfNeurons - } - - set { - return _listOfNeurons = newValue - } - } - - /// Number of neurons in a particular hidden layer - public var numberOfNeuronsInLayer: Int { - - get { - return _numberOfNeuronsInLayer - } - - set { - return _numberOfNeuronsInLayer = newValue + 1 // Don't forget BIAS - } - - } - - /** - The initializeLayer method initializes an HiddenLayer object by creating Neurons with random weights and then filling the listOfNeurons attribute with the correct number of Neurons specificed by the developer. - - - parameter listOfHiddenLayers: A list of HiddenLayer objects. - - parameter inputLayer: The input layer (InputLayer Object). - - paramter outputLayer: The output layer (OutputLayer Object). - - - returns: An InputLayer Object. - */ - open func initializeLayer(inputLayer: InputLayer, listOfHiddenLayers: [HiddenLayer], outputLayer: OutputLayer) -> [HiddenLayer] { - - var weightsComingIn: [Float] = [] - var weightsGoingOut: [Float] = [] - var listOfNeurons: [Neuron] = [] - - var numberOfHiddenLayers = listOfHiddenLayers.count - - for var i in 0..