diff --git a/Gen/Caffe.hs b/Gen/Caffe.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe (protoInfo, fileDescriptorProto) where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import Text.DescriptorProtos.FileDescriptorProto (FileDescriptorProto)
+import Text.ProtocolBuffers.Reflections (ProtoInfo)
+import qualified Text.ProtocolBuffers.WireMessage as P' (wireGet,getFromBS)
+ 
+protoInfo :: ProtoInfo
+protoInfo
+ = Prelude'.read
+    "ProtoInfo {protoMod = ProtoName {protobufName = FIName \".caffe\", haskellPrefix = [MName \"Gen\"], parentModule = [], baseName = MName \"Caffe\"}, protoFilePath = [\"Gen\",\"Caffe.hs\"], protoSource = \"caffe.proto\", extensionKeys = fromList [], messages = [DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}, descFilePath = [\"Gen\",\"Caffe\",\"BlobProto.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.num\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"num\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"channels\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"height\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"width\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.data\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"data'\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Just (WireTag {getWireTag = 45},WireTag {getWireTag = 42}), wireTagLength = 1, isPacked = True, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.diff\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"diff\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 50}, packedTag = Just (WireTag {getWireTag = 53},WireTag {getWireTag = 50}), wireTagLength = 1, isPacked = True, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.BlobProtoVector\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProtoVector\"}, descFilePath = [\"Gen\",\"Caffe\",\"BlobProtoVector.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProtoVector.blobs\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProtoVector\"], baseName' = FName \"blobs\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.Datum\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"Datum\"}, descFilePath = [\"Gen\",\"Caffe\",\"Datum.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"channels\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"height\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"width\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.data\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"data'\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.label\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"label\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.float_data\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"float_data\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 53}, packedTag = Just (WireTag {getWireTag = 53},WireTag {getWireTag = 50}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.encoded\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"encoded\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"FillerParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"type'\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"constant\", hsDefault = Just (HsDef'ByteString \"constant\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.value\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"value\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.min\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"min\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 29}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.max\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"max\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 37}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.mean\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"mean\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 45}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.std\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"std\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 53}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.sparse\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"sparse\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"-1\", hsDefault = Just (HsDef'Integer (-1))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.NetParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"NetParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"name\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.input\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"input\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.input_dim\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"input_dim\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Just (WireTag {getWireTag = 32},WireTag {getWireTag = 34}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.force_backward\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"force_backward\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.state\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"state\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 50}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetState\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetState\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.debug_info\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"debug_info\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.layer\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"layer\"}, fieldNumber = FieldId {getFieldId = 100}, wireTag = WireTag {getWireTag = 802}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LayerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.layers\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"layers\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.V1LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"V1LayerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.SolverParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SolverParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"SolverParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.net\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"net\"}, fieldNumber = FieldId {getFieldId = 24}, wireTag = WireTag {getWireTag = 194}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.net_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"net_param\"}, fieldNumber = FieldId {getFieldId = 25}, wireTag = WireTag {getWireTag = 202}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.train_net\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"train_net\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_net\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_net\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.train_net_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"train_net_param\"}, fieldNumber = FieldId {getFieldId = 21}, wireTag = WireTag {getWireTag = 170}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_net_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_net_param\"}, fieldNumber = FieldId {getFieldId = 22}, wireTag = WireTag {getWireTag = 178}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.train_state\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"train_state\"}, fieldNumber = FieldId {getFieldId = 26}, wireTag = WireTag {getWireTag = 210}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetState\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetState\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_state\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_state\"}, fieldNumber = FieldId {getFieldId = 27}, wireTag = WireTag {getWireTag = 218}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetState\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetState\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_iter\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_iter\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Just (WireTag {getWireTag = 24},WireTag {getWireTag = 26}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_interval\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_interval\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_compute_loss\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_compute_loss\"}, fieldNumber = FieldId {getFieldId = 19}, wireTag = WireTag {getWireTag = 152}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_initialization\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_initialization\"}, fieldNumber = FieldId {getFieldId = 32}, wireTag = WireTag {getWireTag = 256}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.base_lr\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"base_lr\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 45}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.display\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"display\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.average_loss\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"average_loss\"}, fieldNumber = FieldId {getFieldId = 33}, wireTag = WireTag {getWireTag = 264}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.max_iter\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"max_iter\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.lr_policy\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"lr_policy\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 66}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.gamma\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"gamma\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 77}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.power\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"power\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 85}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.momentum\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"momentum\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 93}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.weight_decay\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"weight_decay\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 101}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.regularization_type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"regularization_type\"}, fieldNumber = FieldId {getFieldId = 29}, wireTag = WireTag {getWireTag = 234}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"L2\", hsDefault = Just (HsDef'ByteString \"L2\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.stepsize\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"stepsize\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 104}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.stepvalue\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"stepvalue\"}, fieldNumber = FieldId {getFieldId = 34}, wireTag = WireTag {getWireTag = 272}, packedTag = Just (WireTag {getWireTag = 272},WireTag {getWireTag = 274}), wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.snapshot\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"snapshot\"}, fieldNumber = FieldId {getFieldId = 14}, wireTag = WireTag {getWireTag = 112}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.snapshot_prefix\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"snapshot_prefix\"}, fieldNumber = FieldId {getFieldId = 15}, wireTag = WireTag {getWireTag = 122}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.snapshot_diff\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"snapshot_diff\"}, fieldNumber = FieldId {getFieldId = 16}, wireTag = WireTag {getWireTag = 128}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.solver_mode\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"solver_mode\"}, fieldNumber = FieldId {getFieldId = 17}, wireTag = WireTag {getWireTag = 136}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SolverParameter.SolverMode\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SolverParameter\"], baseName = MName \"SolverMode\"}), hsRawDefault = Just \"GPU\", hsDefault = Just (HsDef'Enum \"GPU\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.device_id\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"device_id\"}, fieldNumber = FieldId {getFieldId = 18}, wireTag = WireTag {getWireTag = 144}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.random_seed\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"random_seed\"}, fieldNumber = FieldId {getFieldId = 20}, wireTag = WireTag {getWireTag = 160}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 3}, typeName = Nothing, hsRawDefault = Just \"-1\", hsDefault = Just (HsDef'Integer (-1))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.solver_type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"solver_type\"}, fieldNumber = FieldId {getFieldId = 30}, wireTag = WireTag {getWireTag = 240}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SolverParameter.SolverType\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SolverParameter\"], baseName = MName \"SolverType\"}), hsRawDefault = Just \"SGD\", hsDefault = Just (HsDef'Enum \"SGD\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.delta\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"delta\"}, fieldNumber = FieldId {getFieldId = 31}, wireTag = WireTag {getWireTag = 253}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0e-8\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (11258999 % 1125899906842624)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.debug_info\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"debug_info\"}, fieldNumber = FieldId {getFieldId = 23}, wireTag = WireTag {getWireTag = 184}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.snapshot_after_train\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"snapshot_after_train\"}, fieldNumber = FieldId {getFieldId = 28}, wireTag = WireTag {getWireTag = 224}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.SolverState\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SolverState\"}, descFilePath = [\"Gen\",\"Caffe\",\"SolverState.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverState.iter\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverState\"], baseName' = FName \"iter\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverState.learned_net\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverState\"], baseName' = FName \"learned_net\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverState.history\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverState\"], baseName' = FName \"history\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverState.current_step\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverState\"], baseName' = FName \"current_step\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.NetState\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetState\"}, descFilePath = [\"Gen\",\"Caffe\",\"NetState.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetState.phase\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetState\"], baseName' = FName \"phase\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.Phase\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"Phase\"}), hsRawDefault = Just \"TEST\", hsDefault = Just (HsDef'Enum \"TEST\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetState.level\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetState\"], baseName' = FName \"level\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetState.stage\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetState\"], baseName' = FName \"stage\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.NetStateRule\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetStateRule\"}, descFilePath = [\"Gen\",\"Caffe\",\"NetStateRule.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetStateRule.phase\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetStateRule\"], baseName' = FName \"phase\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.Phase\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"Phase\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetStateRule.min_level\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetStateRule\"], baseName' = FName \"min_level\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetStateRule.max_level\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetStateRule\"], baseName' = FName \"max_level\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetStateRule.stage\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetStateRule\"], baseName' = FName \"stage\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetStateRule.not_stage\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetStateRule\"], baseName' = FName \"not_stage\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ParamSpec\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ParamSpec\"}, descFilePath = [\"Gen\",\"Caffe\",\"ParamSpec.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ParamSpec.name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ParamSpec\"], baseName' = FName \"name\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ParamSpec.share_mode\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ParamSpec\"], baseName' = FName \"share_mode\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ParamSpec.DimCheckMode\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"ParamSpec\"], baseName = MName \"DimCheckMode\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ParamSpec.lr_mult\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ParamSpec\"], baseName' = FName \"lr_mult\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 29}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ParamSpec.decay_mult\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ParamSpec\"], baseName' = FName \"decay_mult\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 37}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LayerParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"LayerParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"name\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"type'\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.bottom\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"bottom\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.top\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"top\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.loss_weight\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"loss_weight\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 45}, packedTag = Just (WireTag {getWireTag = 45},WireTag {getWireTag = 42}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"param\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 50}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ParamSpec\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ParamSpec\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.blobs\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"blobs\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 58}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.include\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"include\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 66}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetStateRule\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetStateRule\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.exclude\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"exclude\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 74}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetStateRule\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetStateRule\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.transform_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"transform_param\"}, fieldNumber = FieldId {getFieldId = 100}, wireTag = WireTag {getWireTag = 802}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.TransformationParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TransformationParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"loss_param\"}, fieldNumber = FieldId {getFieldId = 101}, wireTag = WireTag {getWireTag = 810}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.accuracy_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"accuracy_param\"}, fieldNumber = FieldId {getFieldId = 102}, wireTag = WireTag {getWireTag = 818}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.AccuracyParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"AccuracyParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.argmax_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"argmax_param\"}, fieldNumber = FieldId {getFieldId = 103}, wireTag = WireTag {getWireTag = 826}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ArgMaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ArgMaxParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.concat_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"concat_param\"}, fieldNumber = FieldId {getFieldId = 104}, wireTag = WireTag {getWireTag = 834}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ConcatParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConcatParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.contrastive_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"contrastive_loss_param\"}, fieldNumber = FieldId {getFieldId = 105}, wireTag = WireTag {getWireTag = 842}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ContrastiveLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ContrastiveLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.convolution_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"convolution_param\"}, fieldNumber = FieldId {getFieldId = 106}, wireTag = WireTag {getWireTag = 850}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ConvolutionParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConvolutionParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"data_param\"}, fieldNumber = FieldId {getFieldId = 107}, wireTag = WireTag {getWireTag = 858}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.dropout_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"dropout_param\"}, fieldNumber = FieldId {getFieldId = 108}, wireTag = WireTag {getWireTag = 866}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DropoutParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DropoutParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.dummy_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"dummy_data_param\"}, fieldNumber = FieldId {getFieldId = 109}, wireTag = WireTag {getWireTag = 874}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DummyDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DummyDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.eltwise_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"eltwise_param\"}, fieldNumber = FieldId {getFieldId = 110}, wireTag = WireTag {getWireTag = 882}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.EltwiseParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"EltwiseParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.exp_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"exp_param\"}, fieldNumber = FieldId {getFieldId = 111}, wireTag = WireTag {getWireTag = 890}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ExpParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ExpParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.hdf5_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"hdf5_data_param\"}, fieldNumber = FieldId {getFieldId = 112}, wireTag = WireTag {getWireTag = 898}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HDF5DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5DataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.hdf5_output_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"hdf5_output_param\"}, fieldNumber = FieldId {getFieldId = 113}, wireTag = WireTag {getWireTag = 906}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HDF5OutputParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5OutputParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.hinge_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"hinge_loss_param\"}, fieldNumber = FieldId {getFieldId = 114}, wireTag = WireTag {getWireTag = 914}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HingeLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HingeLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.image_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"image_data_param\"}, fieldNumber = FieldId {getFieldId = 115}, wireTag = WireTag {getWireTag = 922}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ImageDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ImageDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.infogain_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"infogain_loss_param\"}, fieldNumber = FieldId {getFieldId = 116}, wireTag = WireTag {getWireTag = 930}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.InfogainLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InfogainLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.inner_product_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"inner_product_param\"}, fieldNumber = FieldId {getFieldId = 117}, wireTag = WireTag {getWireTag = 938}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.InnerProductParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InnerProductParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.lrn_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"lrn_param\"}, fieldNumber = FieldId {getFieldId = 118}, wireTag = WireTag {getWireTag = 946}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LRNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LRNParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.memory_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"memory_data_param\"}, fieldNumber = FieldId {getFieldId = 119}, wireTag = WireTag {getWireTag = 954}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.MemoryDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MemoryDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.mvn_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"mvn_param\"}, fieldNumber = FieldId {getFieldId = 120}, wireTag = WireTag {getWireTag = 962}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.MVNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MVNParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.pooling_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"pooling_param\"}, fieldNumber = FieldId {getFieldId = 121}, wireTag = WireTag {getWireTag = 970}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PoolingParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PoolingParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.power_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"power_param\"}, fieldNumber = FieldId {getFieldId = 122}, wireTag = WireTag {getWireTag = 978}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PowerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PowerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.relu_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"relu_param\"}, fieldNumber = FieldId {getFieldId = 123}, wireTag = WireTag {getWireTag = 986}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ReLUParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ReLUParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.sigmoid_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"sigmoid_param\"}, fieldNumber = FieldId {getFieldId = 124}, wireTag = WireTag {getWireTag = 994}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SigmoidParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SigmoidParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.softmax_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"softmax_param\"}, fieldNumber = FieldId {getFieldId = 125}, wireTag = WireTag {getWireTag = 1002}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SoftmaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SoftmaxParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.slice_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"slice_param\"}, fieldNumber = FieldId {getFieldId = 126}, wireTag = WireTag {getWireTag = 1010}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SliceParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SliceParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.tanh_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"tanh_param\"}, fieldNumber = FieldId {getFieldId = 127}, wireTag = WireTag {getWireTag = 1018}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.TanHParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TanHParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.threshold_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"threshold_param\"}, fieldNumber = FieldId {getFieldId = 128}, wireTag = WireTag {getWireTag = 1026}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ThresholdParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ThresholdParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.window_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"window_data_param\"}, fieldNumber = FieldId {getFieldId = 129}, wireTag = WireTag {getWireTag = 1034}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.WindowDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"WindowDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.TransformationParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TransformationParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"TransformationParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TransformationParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TransformationParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TransformationParameter.mirror\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TransformationParameter\"], baseName' = FName \"mirror\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TransformationParameter.crop_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TransformationParameter\"], baseName' = FName \"crop_size\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TransformationParameter.mean_file\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TransformationParameter\"], baseName' = FName \"mean_file\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TransformationParameter.mean_value\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TransformationParameter\"], baseName' = FName \"mean_value\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 45}, packedTag = Just (WireTag {getWireTag = 45},WireTag {getWireTag = 42}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.LossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LossParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"LossParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LossParameter.ignore_label\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LossParameter\"], baseName' = FName \"ignore_label\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LossParameter.normalize\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LossParameter\"], baseName' = FName \"normalize\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.AccuracyParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"AccuracyParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"AccuracyParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.AccuracyParameter.top_k\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"AccuracyParameter\"], baseName' = FName \"top_k\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ArgMaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ArgMaxParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ArgMaxParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ArgMaxParameter.out_max_val\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ArgMaxParameter\"], baseName' = FName \"out_max_val\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ArgMaxParameter.top_k\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ArgMaxParameter\"], baseName' = FName \"top_k\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ConcatParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConcatParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ConcatParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConcatParameter.concat_dim\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConcatParameter\"], baseName' = FName \"concat_dim\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ContrastiveLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ContrastiveLossParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ContrastiveLossParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ContrastiveLossParameter.margin\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ContrastiveLossParameter\"], baseName' = FName \"margin\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ConvolutionParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConvolutionParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ConvolutionParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.num_output\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"num_output\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.bias_term\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"bias_term\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.pad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"pad\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.pad_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"pad_h\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 72}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.pad_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"pad_w\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 80}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.kernel_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"kernel_size\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.kernel_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"kernel_h\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.kernel_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"kernel_w\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 96}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.group\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"group\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.stride\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"stride\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.stride_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"stride_h\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 104}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.stride_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"stride_w\"}, fieldNumber = FieldId {getFieldId = 14}, wireTag = WireTag {getWireTag = 112}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.weight_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"weight_filler\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 58}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.bias_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"bias_filler\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 66}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 15}, wireTag = WireTag {getWireTag = 120}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ConvolutionParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"DataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.batch_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"batch_size\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.rand_skip\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"rand_skip\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.backend\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"backend\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DataParameter.DB\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"DataParameter\"], baseName = MName \"DB\"}), hsRawDefault = Just \"LEVELDB\", hsDefault = Just (HsDef'Enum \"LEVELDB\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.mean_file\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"mean_file\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.crop_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"crop_size\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.mirror\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"mirror\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.DropoutParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DropoutParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"DropoutParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DropoutParameter.dropout_ratio\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DropoutParameter\"], baseName' = FName \"dropout_ratio\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.DummyDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DummyDataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"DummyDataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DummyDataParameter.data_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DummyDataParameter\"], baseName' = FName \"data_filler\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DummyDataParameter.num\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DummyDataParameter\"], baseName' = FName \"num\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Just (WireTag {getWireTag = 16},WireTag {getWireTag = 18}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DummyDataParameter.channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DummyDataParameter\"], baseName' = FName \"channels\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Just (WireTag {getWireTag = 24},WireTag {getWireTag = 26}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DummyDataParameter.height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DummyDataParameter\"], baseName' = FName \"height\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Just (WireTag {getWireTag = 32},WireTag {getWireTag = 34}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DummyDataParameter.width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DummyDataParameter\"], baseName' = FName \"width\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Just (WireTag {getWireTag = 40},WireTag {getWireTag = 42}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.EltwiseParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"EltwiseParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"EltwiseParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.EltwiseParameter.operation\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"EltwiseParameter\"], baseName' = FName \"operation\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.EltwiseParameter.EltwiseOp\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"EltwiseParameter\"], baseName = MName \"EltwiseOp\"}), hsRawDefault = Just \"SUM\", hsDefault = Just (HsDef'Enum \"SUM\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.EltwiseParameter.coeff\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"EltwiseParameter\"], baseName' = FName \"coeff\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Just (WireTag {getWireTag = 21},WireTag {getWireTag = 18}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.EltwiseParameter.stable_prod_grad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"EltwiseParameter\"], baseName' = FName \"stable_prod_grad\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ExpParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ExpParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ExpParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ExpParameter.base\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ExpParameter\"], baseName' = FName \"base\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"-1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational ((-1) % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ExpParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ExpParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ExpParameter.shift\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ExpParameter\"], baseName' = FName \"shift\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 29}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.HDF5DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5DataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"HDF5DataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.HDF5DataParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"HDF5DataParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.HDF5DataParameter.batch_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"HDF5DataParameter\"], baseName' = FName \"batch_size\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.HDF5OutputParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5OutputParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"HDF5OutputParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.HDF5OutputParameter.file_name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"HDF5OutputParameter\"], baseName' = FName \"file_name\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.HingeLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HingeLossParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"HingeLossParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.HingeLossParameter.norm\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"HingeLossParameter\"], baseName' = FName \"norm\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HingeLossParameter.Norm\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"HingeLossParameter\"], baseName = MName \"Norm\"}), hsRawDefault = Just \"L1\", hsDefault = Just (HsDef'Enum \"L1\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ImageDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ImageDataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ImageDataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.batch_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"batch_size\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.rand_skip\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"rand_skip\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.shuffle\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"shuffle\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.new_height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"new_height\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 72}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.new_width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"new_width\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 80}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.is_color\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"is_color\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.mean_file\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"mean_file\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.crop_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"crop_size\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.mirror\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"mirror\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.root_folder\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"root_folder\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 98}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"\", hsDefault = Just (HsDef'ByteString \"\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.InfogainLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InfogainLossParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"InfogainLossParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.InfogainLossParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"InfogainLossParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.InnerProductParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InnerProductParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"InnerProductParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.InnerProductParameter.num_output\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"InnerProductParameter\"], baseName' = FName \"num_output\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.InnerProductParameter.bias_term\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"InnerProductParameter\"], baseName' = FName \"bias_term\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.InnerProductParameter.weight_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"InnerProductParameter\"], baseName' = FName \"weight_filler\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.InnerProductParameter.bias_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"InnerProductParameter\"], baseName' = FName \"bias_filler\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.LRNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LRNParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"LRNParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LRNParameter.local_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LRNParameter\"], baseName' = FName \"local_size\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"5\", hsDefault = Just (HsDef'Integer 5)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LRNParameter.alpha\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LRNParameter\"], baseName' = FName \"alpha\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LRNParameter.beta\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LRNParameter\"], baseName' = FName \"beta\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 29}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.75\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (3 % 4)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LRNParameter.norm_region\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LRNParameter\"], baseName' = FName \"norm_region\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LRNParameter.NormRegion\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"LRNParameter\"], baseName = MName \"NormRegion\"}), hsRawDefault = Just \"ACROSS_CHANNELS\", hsDefault = Just (HsDef'Enum \"ACROSS_CHANNELS\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LRNParameter.k\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LRNParameter\"], baseName' = FName \"k\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 45}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.MemoryDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MemoryDataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"MemoryDataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MemoryDataParameter.batch_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MemoryDataParameter\"], baseName' = FName \"batch_size\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MemoryDataParameter.channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MemoryDataParameter\"], baseName' = FName \"channels\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MemoryDataParameter.height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MemoryDataParameter\"], baseName' = FName \"height\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MemoryDataParameter.width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MemoryDataParameter\"], baseName' = FName \"width\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.MVNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MVNParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"MVNParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MVNParameter.normalize_variance\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MVNParameter\"], baseName' = FName \"normalize_variance\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MVNParameter.across_channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MVNParameter\"], baseName' = FName \"across_channels\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.PoolingParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PoolingParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"PoolingParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.pool\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"pool\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PoolingParameter.PoolMethod\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"PoolingParameter\"], baseName = MName \"PoolMethod\"}), hsRawDefault = Just \"MAX\", hsDefault = Just (HsDef'Enum \"MAX\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.pad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"pad\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.pad_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"pad_h\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 72}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.pad_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"pad_w\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 80}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.kernel_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"kernel_size\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.kernel_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"kernel_h\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.kernel_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"kernel_w\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.stride\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"stride\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.stride_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"stride_h\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.stride_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"stride_w\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PoolingParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"PoolingParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.global_pooling\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"global_pooling\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 96}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.PowerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PowerParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"PowerParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PowerParameter.power\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PowerParameter\"], baseName' = FName \"power\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PowerParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PowerParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PowerParameter.shift\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PowerParameter\"], baseName' = FName \"shift\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 29}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ReLUParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ReLUParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ReLUParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ReLUParameter.negative_slope\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ReLUParameter\"], baseName' = FName \"negative_slope\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ReLUParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ReLUParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ReLUParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"ReLUParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.SigmoidParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SigmoidParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"SigmoidParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SigmoidParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SigmoidParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SigmoidParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SigmoidParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.SliceParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SliceParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"SliceParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SliceParameter.slice_dim\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SliceParameter\"], baseName' = FName \"slice_dim\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SliceParameter.slice_point\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SliceParameter\"], baseName' = FName \"slice_point\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Just (WireTag {getWireTag = 16},WireTag {getWireTag = 18}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.SoftmaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SoftmaxParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"SoftmaxParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SoftmaxParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SoftmaxParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SoftmaxParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SoftmaxParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.TanHParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TanHParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"TanHParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TanHParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TanHParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.TanHParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"TanHParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ThresholdParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ThresholdParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ThresholdParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ThresholdParameter.threshold\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ThresholdParameter\"], baseName' = FName \"threshold\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.WindowDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"WindowDataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"WindowDataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.mean_file\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"mean_file\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.batch_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"batch_size\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.crop_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"crop_size\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.mirror\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"mirror\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.fg_threshold\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"fg_threshold\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 61}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.bg_threshold\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"bg_threshold\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 69}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.fg_fraction\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"fg_fraction\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 77}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.25\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 4)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.context_pad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"context_pad\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 80}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.crop_mode\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"crop_mode\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 90}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"warp\", hsDefault = Just (HsDef'ByteString \"warp\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.cache_images\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"cache_images\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 96}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.root_folder\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"root_folder\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 106}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"\", hsDefault = Just (HsDef'ByteString \"\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.V1LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"V1LayerParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"V1LayerParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.bottom\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"bottom\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.top\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"top\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"name\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.include\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"include\"}, fieldNumber = FieldId {getFieldId = 32}, wireTag = WireTag {getWireTag = 258}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetStateRule\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetStateRule\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.exclude\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"exclude\"}, fieldNumber = FieldId {getFieldId = 33}, wireTag = WireTag {getWireTag = 266}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetStateRule\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetStateRule\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"type'\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.V1LayerParameter.LayerType\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName = MName \"LayerType\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.blobs\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"blobs\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 50}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"param\"}, fieldNumber = FieldId {getFieldId = 1001}, wireTag = WireTag {getWireTag = 8010}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.blob_share_mode\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"blob_share_mode\"}, fieldNumber = FieldId {getFieldId = 1002}, wireTag = WireTag {getWireTag = 8016}, packedTag = Just (WireTag {getWireTag = 8016},WireTag {getWireTag = 8018}), wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.V1LayerParameter.DimCheckMode\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName = MName \"DimCheckMode\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.blobs_lr\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"blobs_lr\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 61}, packedTag = Just (WireTag {getWireTag = 61},WireTag {getWireTag = 58}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.weight_decay\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"weight_decay\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 69}, packedTag = Just (WireTag {getWireTag = 69},WireTag {getWireTag = 66}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.loss_weight\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"loss_weight\"}, fieldNumber = FieldId {getFieldId = 35}, wireTag = WireTag {getWireTag = 285}, packedTag = Just (WireTag {getWireTag = 285},WireTag {getWireTag = 282}), wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.accuracy_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"accuracy_param\"}, fieldNumber = FieldId {getFieldId = 27}, wireTag = WireTag {getWireTag = 218}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.AccuracyParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"AccuracyParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.argmax_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"argmax_param\"}, fieldNumber = FieldId {getFieldId = 23}, wireTag = WireTag {getWireTag = 186}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ArgMaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ArgMaxParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.concat_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"concat_param\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 74}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ConcatParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConcatParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.contrastive_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"contrastive_loss_param\"}, fieldNumber = FieldId {getFieldId = 40}, wireTag = WireTag {getWireTag = 322}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ContrastiveLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ContrastiveLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.convolution_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"convolution_param\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 82}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ConvolutionParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConvolutionParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"data_param\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 90}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.dropout_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"dropout_param\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 98}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DropoutParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DropoutParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.dummy_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"dummy_data_param\"}, fieldNumber = FieldId {getFieldId = 26}, wireTag = WireTag {getWireTag = 210}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DummyDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DummyDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.eltwise_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"eltwise_param\"}, fieldNumber = FieldId {getFieldId = 24}, wireTag = WireTag {getWireTag = 194}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.EltwiseParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"EltwiseParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.exp_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"exp_param\"}, fieldNumber = FieldId {getFieldId = 41}, wireTag = WireTag {getWireTag = 330}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ExpParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ExpParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.hdf5_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"hdf5_data_param\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 106}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HDF5DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5DataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.hdf5_output_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"hdf5_output_param\"}, fieldNumber = FieldId {getFieldId = 14}, wireTag = WireTag {getWireTag = 114}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HDF5OutputParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5OutputParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.hinge_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"hinge_loss_param\"}, fieldNumber = FieldId {getFieldId = 29}, wireTag = WireTag {getWireTag = 234}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HingeLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HingeLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.image_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"image_data_param\"}, fieldNumber = FieldId {getFieldId = 15}, wireTag = WireTag {getWireTag = 122}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ImageDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ImageDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.infogain_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"infogain_loss_param\"}, fieldNumber = FieldId {getFieldId = 16}, wireTag = WireTag {getWireTag = 130}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.InfogainLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InfogainLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.inner_product_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"inner_product_param\"}, fieldNumber = FieldId {getFieldId = 17}, wireTag = WireTag {getWireTag = 138}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.InnerProductParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InnerProductParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.lrn_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"lrn_param\"}, fieldNumber = FieldId {getFieldId = 18}, wireTag = WireTag {getWireTag = 146}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LRNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LRNParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.memory_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"memory_data_param\"}, fieldNumber = FieldId {getFieldId = 22}, wireTag = WireTag {getWireTag = 178}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.MemoryDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MemoryDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.mvn_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"mvn_param\"}, fieldNumber = FieldId {getFieldId = 34}, wireTag = WireTag {getWireTag = 274}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.MVNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MVNParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.pooling_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"pooling_param\"}, fieldNumber = FieldId {getFieldId = 19}, wireTag = WireTag {getWireTag = 154}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PoolingParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PoolingParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.power_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"power_param\"}, fieldNumber = FieldId {getFieldId = 21}, wireTag = WireTag {getWireTag = 170}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PowerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PowerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.relu_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"relu_param\"}, fieldNumber = FieldId {getFieldId = 30}, wireTag = WireTag {getWireTag = 242}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ReLUParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ReLUParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.sigmoid_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"sigmoid_param\"}, fieldNumber = FieldId {getFieldId = 38}, wireTag = WireTag {getWireTag = 306}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SigmoidParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SigmoidParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.softmax_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"softmax_param\"}, fieldNumber = FieldId {getFieldId = 39}, wireTag = WireTag {getWireTag = 314}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SoftmaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SoftmaxParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.slice_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"slice_param\"}, fieldNumber = FieldId {getFieldId = 31}, wireTag = WireTag {getWireTag = 250}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SliceParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SliceParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.tanh_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"tanh_param\"}, fieldNumber = FieldId {getFieldId = 37}, wireTag = WireTag {getWireTag = 298}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.TanHParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TanHParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.threshold_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"threshold_param\"}, fieldNumber = FieldId {getFieldId = 25}, wireTag = WireTag {getWireTag = 202}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ThresholdParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ThresholdParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.window_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"window_data_param\"}, fieldNumber = FieldId {getFieldId = 20}, wireTag = WireTag {getWireTag = 162}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.WindowDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"WindowDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.transform_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"transform_param\"}, fieldNumber = FieldId {getFieldId = 36}, wireTag = WireTag {getWireTag = 290}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.TransformationParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TransformationParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"loss_param\"}, fieldNumber = FieldId {getFieldId = 42}, wireTag = WireTag {getWireTag = 338}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.layer\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"layer\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.V0LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"V0LayerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False},DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.V0LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"V0LayerParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"V0LayerParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"name\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"type'\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.num_output\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"num_output\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.biasterm\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"biasterm\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.weight_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"weight_filler\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.bias_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"bias_filler\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 50}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.pad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"pad\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.kernelsize\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"kernelsize\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.group\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"group\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 72}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.stride\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"stride\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 80}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.pool\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"pool\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.V0LayerParameter.PoolMethod\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName = MName \"PoolMethod\"}), hsRawDefault = Just \"MAX\", hsDefault = Just (HsDef'Enum \"MAX\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.dropout_ratio\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"dropout_ratio\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 101}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.local_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"local_size\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 104}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"5\", hsDefault = Just (HsDef'Integer 5)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.alpha\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"alpha\"}, fieldNumber = FieldId {getFieldId = 14}, wireTag = WireTag {getWireTag = 117}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.beta\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"beta\"}, fieldNumber = FieldId {getFieldId = 15}, wireTag = WireTag {getWireTag = 125}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.75\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (3 % 4)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.k\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"k\"}, fieldNumber = FieldId {getFieldId = 22}, wireTag = WireTag {getWireTag = 181}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 16}, wireTag = WireTag {getWireTag = 130}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 17}, wireTag = WireTag {getWireTag = 141}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.meanfile\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"meanfile\"}, fieldNumber = FieldId {getFieldId = 18}, wireTag = WireTag {getWireTag = 146}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.batchsize\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"batchsize\"}, fieldNumber = FieldId {getFieldId = 19}, wireTag = WireTag {getWireTag = 152}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.cropsize\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"cropsize\"}, fieldNumber = FieldId {getFieldId = 20}, wireTag = WireTag {getWireTag = 160}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.mirror\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"mirror\"}, fieldNumber = FieldId {getFieldId = 21}, wireTag = WireTag {getWireTag = 168}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.blobs\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"blobs\"}, fieldNumber = FieldId {getFieldId = 50}, wireTag = WireTag {getWireTag = 402}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.blobs_lr\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"blobs_lr\"}, fieldNumber = FieldId {getFieldId = 51}, wireTag = WireTag {getWireTag = 413}, packedTag = Just (WireTag {getWireTag = 413},WireTag {getWireTag = 410}), wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.weight_decay\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"weight_decay\"}, fieldNumber = FieldId {getFieldId = 52}, wireTag = WireTag {getWireTag = 421}, packedTag = Just (WireTag {getWireTag = 421},WireTag {getWireTag = 418}), wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.rand_skip\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"rand_skip\"}, fieldNumber = FieldId {getFieldId = 53}, wireTag = WireTag {getWireTag = 424}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.det_fg_threshold\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"det_fg_threshold\"}, fieldNumber = FieldId {getFieldId = 54}, wireTag = WireTag {getWireTag = 437}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.det_bg_threshold\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"det_bg_threshold\"}, fieldNumber = FieldId {getFieldId = 55}, wireTag = WireTag {getWireTag = 445}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.det_fg_fraction\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"det_fg_fraction\"}, fieldNumber = FieldId {getFieldId = 56}, wireTag = WireTag {getWireTag = 453}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.25\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 4)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.det_context_pad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"det_context_pad\"}, fieldNumber = FieldId {getFieldId = 58}, wireTag = WireTag {getWireTag = 464}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.det_crop_mode\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"det_crop_mode\"}, fieldNumber = FieldId {getFieldId = 59}, wireTag = WireTag {getWireTag = 474}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"warp\", hsDefault = Just (HsDef'ByteString \"warp\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.new_num\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"new_num\"}, fieldNumber = FieldId {getFieldId = 60}, wireTag = WireTag {getWireTag = 480}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.new_channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"new_channels\"}, fieldNumber = FieldId {getFieldId = 61}, wireTag = WireTag {getWireTag = 488}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.new_height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"new_height\"}, fieldNumber = FieldId {getFieldId = 62}, wireTag = WireTag {getWireTag = 496}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.new_width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"new_width\"}, fieldNumber = FieldId {getFieldId = 63}, wireTag = WireTag {getWireTag = 504}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.shuffle_images\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"shuffle_images\"}, fieldNumber = FieldId {getFieldId = 64}, wireTag = WireTag {getWireTag = 512}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.concat_dim\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"concat_dim\"}, fieldNumber = FieldId {getFieldId = 65}, wireTag = WireTag {getWireTag = 520}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.hdf5_output_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"hdf5_output_param\"}, fieldNumber = FieldId {getFieldId = 1001}, wireTag = WireTag {getWireTag = 8010}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HDF5OutputParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5OutputParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}], enums = [EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.Phase\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"Phase\"}, enumFilePath = [\"Gen\",\"Caffe\",\"Phase.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"TRAIN\"),(EnumCode {getEnumCode = 1},\"TEST\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.SolverParameter.SolverMode\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SolverParameter\"], baseName = MName \"SolverMode\"}, enumFilePath = [\"Gen\",\"Caffe\",\"SolverParameter\",\"SolverMode.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"CPU\"),(EnumCode {getEnumCode = 1},\"GPU\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.SolverParameter.SolverType\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SolverParameter\"], baseName = MName \"SolverType\"}, enumFilePath = [\"Gen\",\"Caffe\",\"SolverParameter\",\"SolverType.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"SGD\"),(EnumCode {getEnumCode = 1},\"NESTEROV\"),(EnumCode {getEnumCode = 2},\"ADAGRAD\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.ParamSpec.DimCheckMode\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"ParamSpec\"], baseName = MName \"DimCheckMode\"}, enumFilePath = [\"Gen\",\"Caffe\",\"ParamSpec\",\"DimCheckMode.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"STRICT\"),(EnumCode {getEnumCode = 1},\"PERMISSIVE\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.ConvolutionParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName = MName \"Engine\"}, enumFilePath = [\"Gen\",\"Caffe\",\"ConvolutionParameter\",\"Engine.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"DEFAULT\"),(EnumCode {getEnumCode = 1},\"CAFFE\"),(EnumCode {getEnumCode = 2},\"CUDNN\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.DataParameter.DB\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"DataParameter\"], baseName = MName \"DB\"}, enumFilePath = [\"Gen\",\"Caffe\",\"DataParameter\",\"DB.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"LEVELDB\"),(EnumCode {getEnumCode = 1},\"LMDB\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.EltwiseParameter.EltwiseOp\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"EltwiseParameter\"], baseName = MName \"EltwiseOp\"}, enumFilePath = [\"Gen\",\"Caffe\",\"EltwiseParameter\",\"EltwiseOp.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"PROD\"),(EnumCode {getEnumCode = 1},\"SUM\"),(EnumCode {getEnumCode = 2},\"MAX\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.HingeLossParameter.Norm\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"HingeLossParameter\"], baseName = MName \"Norm\"}, enumFilePath = [\"Gen\",\"Caffe\",\"HingeLossParameter\",\"Norm.hs\"], enumValues = [(EnumCode {getEnumCode = 1},\"L1\"),(EnumCode {getEnumCode = 2},\"L2\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.LRNParameter.NormRegion\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"LRNParameter\"], baseName = MName \"NormRegion\"}, enumFilePath = [\"Gen\",\"Caffe\",\"LRNParameter\",\"NormRegion.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"ACROSS_CHANNELS\"),(EnumCode {getEnumCode = 1},\"WITHIN_CHANNEL\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.PoolingParameter.PoolMethod\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"PoolingParameter\"], baseName = MName \"PoolMethod\"}, enumFilePath = [\"Gen\",\"Caffe\",\"PoolingParameter\",\"PoolMethod.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"MAX\"),(EnumCode {getEnumCode = 1},\"AVE\"),(EnumCode {getEnumCode = 2},\"STOCHASTIC\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.PoolingParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"PoolingParameter\"], baseName = MName \"Engine\"}, enumFilePath = [\"Gen\",\"Caffe\",\"PoolingParameter\",\"Engine.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"DEFAULT\"),(EnumCode {getEnumCode = 1},\"CAFFE\"),(EnumCode {getEnumCode = 2},\"CUDNN\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.ReLUParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"ReLUParameter\"], baseName = MName \"Engine\"}, enumFilePath = [\"Gen\",\"Caffe\",\"ReLUParameter\",\"Engine.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"DEFAULT\"),(EnumCode {getEnumCode = 1},\"CAFFE\"),(EnumCode {getEnumCode = 2},\"CUDNN\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.SigmoidParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SigmoidParameter\"], baseName = MName \"Engine\"}, enumFilePath = [\"Gen\",\"Caffe\",\"SigmoidParameter\",\"Engine.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"DEFAULT\"),(EnumCode {getEnumCode = 1},\"CAFFE\"),(EnumCode {getEnumCode = 2},\"CUDNN\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.SoftmaxParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SoftmaxParameter\"], baseName = MName \"Engine\"}, enumFilePath = [\"Gen\",\"Caffe\",\"SoftmaxParameter\",\"Engine.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"DEFAULT\"),(EnumCode {getEnumCode = 1},\"CAFFE\"),(EnumCode {getEnumCode = 2},\"CUDNN\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.TanHParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"TanHParameter\"], baseName = MName \"Engine\"}, enumFilePath = [\"Gen\",\"Caffe\",\"TanHParameter\",\"Engine.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"DEFAULT\"),(EnumCode {getEnumCode = 1},\"CAFFE\"),(EnumCode {getEnumCode = 2},\"CUDNN\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.V1LayerParameter.LayerType\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName = MName \"LayerType\"}, enumFilePath = [\"Gen\",\"Caffe\",\"V1LayerParameter\",\"LayerType.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"NONE\"),(EnumCode {getEnumCode = 35},\"ABSVAL\"),(EnumCode {getEnumCode = 1},\"ACCURACY\"),(EnumCode {getEnumCode = 30},\"ARGMAX\"),(EnumCode {getEnumCode = 2},\"BNLL\"),(EnumCode {getEnumCode = 3},\"CONCAT\"),(EnumCode {getEnumCode = 37},\"CONTRASTIVE_LOSS\"),(EnumCode {getEnumCode = 4},\"CONVOLUTION\"),(EnumCode {getEnumCode = 5},\"DATA\"),(EnumCode {getEnumCode = 39},\"DECONVOLUTION\"),(EnumCode {getEnumCode = 6},\"DROPOUT\"),(EnumCode {getEnumCode = 32},\"DUMMY_DATA\"),(EnumCode {getEnumCode = 7},\"EUCLIDEAN_LOSS\"),(EnumCode {getEnumCode = 25},\"ELTWISE\"),(EnumCode {getEnumCode = 38},\"EXP\"),(EnumCode {getEnumCode = 8},\"FLATTEN\"),(EnumCode {getEnumCode = 9},\"HDF5_DATA\"),(EnumCode {getEnumCode = 10},\"HDF5_OUTPUT\"),(EnumCode {getEnumCode = 28},\"HINGE_LOSS\"),(EnumCode {getEnumCode = 11},\"IM2COL\"),(EnumCode {getEnumCode = 12},\"IMAGE_DATA\"),(EnumCode {getEnumCode = 13},\"INFOGAIN_LOSS\"),(EnumCode {getEnumCode = 14},\"INNER_PRODUCT\"),(EnumCode {getEnumCode = 15},\"LRN\"),(EnumCode {getEnumCode = 29},\"MEMORY_DATA\"),(EnumCode {getEnumCode = 16},\"MULTINOMIAL_LOGISTIC_LOSS\"),(EnumCode {getEnumCode = 34},\"MVN\"),(EnumCode {getEnumCode = 17},\"POOLING\"),(EnumCode {getEnumCode = 26},\"POWER\"),(EnumCode {getEnumCode = 18},\"RELU\"),(EnumCode {getEnumCode = 19},\"SIGMOID\"),(EnumCode {getEnumCode = 27},\"SIGMOID_CROSS_ENTROPY_LOSS\"),(EnumCode {getEnumCode = 36},\"SILENCE\"),(EnumCode {getEnumCode = 20},\"SOFTMAX\"),(EnumCode {getEnumCode = 21},\"SOFTMAX_LOSS\"),(EnumCode {getEnumCode = 22},\"SPLIT\"),(EnumCode {getEnumCode = 33},\"SLICE\"),(EnumCode {getEnumCode = 23},\"TANH\"),(EnumCode {getEnumCode = 24},\"WINDOW_DATA\"),(EnumCode {getEnumCode = 31},\"THRESHOLD\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.V1LayerParameter.DimCheckMode\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName = MName \"DimCheckMode\"}, enumFilePath = [\"Gen\",\"Caffe\",\"V1LayerParameter\",\"DimCheckMode.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"STRICT\"),(EnumCode {getEnumCode = 1},\"PERMISSIVE\")]},EnumInfo {enumName = ProtoName {protobufName = FIName \".caffe.V0LayerParameter.PoolMethod\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName = MName \"PoolMethod\"}, enumFilePath = [\"Gen\",\"Caffe\",\"V0LayerParameter\",\"PoolMethod.hs\"], enumValues = [(EnumCode {getEnumCode = 0},\"MAX\"),(EnumCode {getEnumCode = 1},\"AVE\"),(EnumCode {getEnumCode = 2},\"STOCHASTIC\")]}], knownKeyMap = fromList []}"
+ 
+fileDescriptorProto :: FileDescriptorProto
+fileDescriptorProto
+ = P'.getFromBS (P'.wireGet 11)
+    (P'.pack
+      "\179Z\n\vcaffe.proto\DC2\ENQcaffe\"\129\SOH\n\tBlobProto\DC2\SO\n\ETXnum\CAN\SOH \SOH(\ENQ:\SOH0\DC2\DC3\n\bchannels\CAN\STX \SOH(\ENQ:\SOH0\DC2\DC1\n\ACKheight\CAN\ETX \SOH(\ENQ:\SOH0\DC2\DLE\n\ENQwidth\CAN\EOT \SOH(\ENQ:\SOH0\DC2\DC4\n\EOTdata\CAN\ENQ \ETX(\STXB\ACK\b\NUL\DLE\SOH\CAN\NUL\DC2\DC4\n\EOTdiff\CAN\ACK \ETX(\STXB\ACK\b\NUL\DLE\SOH\CAN\NUL\"2\n\SIBlobProtoVector\DC2\US\n\ENQblobs\CAN\SOH \ETX(\v2\DLE.caffe.BlobProto\"\129\SOH\n\ENQDatum\DC2\DLE\n\bchannels\CAN\SOH \SOH(\ENQ\DC2\SO\n\ACKheight\CAN\STX \SOH(\ENQ\DC2\r\n\ENQwidth\CAN\ETX \SOH(\ENQ\DC2\f\n\EOTdata\CAN\EOT \SOH(\f\DC2\r\n\ENQlabel\CAN\ENQ \SOH(\ENQ\DC2\DC2\n\nfloat_data\CAN\ACK \ETX(\STX\DC2\SYN\n\aencoded\CAN\a \SOH(\b:\ENQfalse\"\154\SOH\n\SIFillerParameter\DC2\SYN\n\EOTtype\CAN\SOH \SOH(\t:\bconstant\DC2\DC2\n\ENQvalue\CAN\STX \SOH(\STX:\ETX0.0\DC2\DLE\n\ETXmin\CAN\ETX \SOH(\STX:\ETX0.0\DC2\DLE\n\ETXmax\CAN\EOT \SOH(\STX:\ETX1.0\DC2\DC1\n\EOTmean\CAN\ENQ \SOH(\STX:\ETX0.0\DC2\DLE\n\ETXstd\CAN\ACK \SOH(\STX:\ETX1.0\DC2\DC2\n\ACKsparse\CAN\a \SOH(\ENQ:\STX-1\"\231\SOH\n\fNetParameter\DC2\f\n\EOTname\CAN\SOH \SOH(\t\DC2\r\n\ENQinput\CAN\ETX \ETX(\t\DC2\DC1\n\tinput_dim\CAN\EOT \ETX(\ENQ\DC2\GS\n\SOforce_backward\CAN\ENQ \SOH(\b:\ENQfalse\DC2\RS\n\ENQstate\CAN\ACK \SOH(\v2\SI.caffe.NetState\DC2\EM\n\ndebug_info\CAN\a \SOH(\b:\ENQfalse\DC2$\n\ENQlayer\CANd \ETX(\v2\NAK.caffe.LayerParameter\DC2'\n\ACKlayers\CAN\STX \ETX(\v2\ETB.caffe.V1LayerParameter\"\140\b\n\SISolverParameter\DC2\v\n\ETXnet\CAN\CAN \SOH(\t\DC2&\n\tnet_param\CAN\EM \SOH(\v2\DC3.caffe.NetParameter\DC2\DC1\n\ttrain_net\CAN\SOH \SOH(\t\DC2\DLE\n\btest_net\CAN\STX \ETX(\t\DC2,\n\SItrain_net_param\CAN\NAK \SOH(\v2\DC3.caffe.NetParameter\DC2+\n\SOtest_net_param\CAN\SYN \ETX(\v2\DC3.caffe.NetParameter\DC2$\n\vtrain_state\CAN\SUB \SOH(\v2\SI.caffe.NetState\DC2#\n\ntest_state\CAN\ESC \ETX(\v2\SI.caffe.NetState\DC2\DC1\n\ttest_iter\CAN\ETX \ETX(\ENQ\DC2\CAN\n\rtest_interval\CAN\EOT \SOH(\ENQ:\SOH0\DC2 \n\DC1test_compute_loss\CAN\DC3 \SOH(\b:\ENQfalse\DC2!\n\DC3test_initialization\CAN  \SOH(\b:\EOTtrue\DC2\SI\n\abase_lr\CAN\ENQ \SOH(\STX\DC2\SI\n\adisplay\CAN\ACK \SOH(\ENQ\DC2\ETB\n\faverage_loss\CAN! \SOH(\ENQ:\SOH1\DC2\DLE\n\bmax_iter\CAN\a \SOH(\ENQ\DC2\DC1\n\tlr_policy\CAN\b \SOH(\t\DC2\r\n\ENQgamma\CAN\t \SOH(\STX\DC2\r\n\ENQpower\CAN\n \SOH(\STX\DC2\DLE\n\bmomentum\CAN\v \SOH(\STX\DC2\DC4\n\fweight_decay\CAN\f \SOH(\STX\DC2\US\n\DC3regularization_type\CAN\GS \SOH(\t:\STXL2\DC2\DLE\n\bstepsize\CAN\r \SOH(\ENQ\DC2\DC1\n\tstepvalue\CAN\" \ETX(\ENQ\DC2\DC3\n\bsnapshot\CAN\SO \SOH(\ENQ:\SOH0\DC2\ETB\n\SIsnapshot_prefix\CAN\SI \SOH(\t\DC2\FS\n\rsnapshot_diff\CAN\DLE \SOH(\b:\ENQfalse\DC2;\n\vsolver_mode\CAN\DC1 \SOH(\SO2!.caffe.SolverParameter.SolverMode:\ETXGPU\DC2\DC4\n\tdevice_id\CAN\DC2 \SOH(\ENQ:\SOH0\DC2\ETB\n\vrandom_seed\CAN\DC4 \SOH(\ETX:\STX-1\DC2;\n\vsolver_type\CAN\RS \SOH(\SO2!.caffe.SolverParameter.SolverType:\ETXSGD\DC2\NAK\n\ENQdelta\CAN\US \SOH(\STX:\ACK1.0e-8\DC2\EM\n\ndebug_info\CAN\ETB \SOH(\b:\ENQfalse\DC2\"\n\DC4snapshot_after_train\CAN\FS \SOH(\b:\EOTtrue\"\RS\n\nSolverMode\DC2\a\n\ETXCPU\DLE\NUL\DC2\a\n\ETXGPU\DLE\SOH\"0\n\nSolverType\DC2\a\n\ETXSGD\DLE\NUL\DC2\f\n\bNESTEROV\DLE\SOH\DC2\v\n\aADAGRAD\DLE\STX\"l\n\vSolverState\DC2\f\n\EOTiter\CAN\SOH \SOH(\ENQ\DC2\DC3\n\vlearned_net\CAN\STX \SOH(\t\DC2!\n\ahistory\CAN\ETX \ETX(\v2\DLE.caffe.BlobProto\DC2\ETB\n\fcurrent_step\CAN\EOT \SOH(\ENQ:\SOH0\"N\n\bNetState\DC2!\n\ENQphase\CAN\SOH \SOH(\SO2\f.caffe.Phase:\EOTTEST\DC2\DLE\n\ENQlevel\CAN\STX \SOH(\ENQ:\SOH0\DC2\r\n\ENQstage\CAN\ETX \ETX(\t\"s\n\fNetStateRule\DC2\ESC\n\ENQphase\CAN\SOH \SOH(\SO2\f.caffe.Phase\DC2\DC1\n\tmin_level\CAN\STX \SOH(\ENQ\DC2\DC1\n\tmax_level\CAN\ETX \SOH(\ENQ\DC2\r\n\ENQstage\CAN\EOT \ETX(\t\DC2\DC1\n\tnot_stage\CAN\ENQ \ETX(\t\"\167\SOH\n\tParamSpec\DC2\f\n\EOTname\CAN\SOH \SOH(\t\DC21\n\nshare_mode\CAN\STX \SOH(\SO2\GS.caffe.ParamSpec.DimCheckMode\DC2\DC4\n\alr_mult\CAN\ETX \SOH(\STX:\ETX1.0\DC2\ETB\n\ndecay_mult\CAN\EOT \SOH(\STX:\ETX1.0\"*\n\fDimCheckMode\DC2\n\n\ACKSTRICT\DLE\NUL\DC2\SO\n\nPERMISSIVE\DLE\SOH\"\183\r\n\SOLayerParameter\DC2\f\n\EOTname\CAN\SOH \SOH(\t\DC2\f\n\EOTtype\CAN\STX \SOH(\t\DC2\SO\n\ACKbottom\CAN\ETX \ETX(\t\DC2\v\n\ETXtop\CAN\EOT \ETX(\t\DC2\DC3\n\vloss_weight\CAN\ENQ \ETX(\STX\DC2\US\n\ENQparam\CAN\ACK \ETX(\v2\DLE.caffe.ParamSpec\DC2\US\n\ENQblobs\CAN\a \ETX(\v2\DLE.caffe.BlobProto\DC2$\n\ainclude\CAN\b \ETX(\v2\DC3.caffe.NetStateRule\DC2$\n\aexclude\CAN\t \ETX(\v2\DC3.caffe.NetStateRule\DC27\n\SItransform_param\CANd \SOH(\v2\RS.caffe.TransformationParameter\DC2(\n\nloss_param\CANe \SOH(\v2\DC4.caffe.LossParameter\DC20\n\SOaccuracy_param\CANf \SOH(\v2\CAN.caffe.AccuracyParameter\DC2,\n\fargmax_param\CANg \SOH(\v2\SYN.caffe.ArgMaxParameter\DC2,\n\fconcat_param\CANh \SOH(\v2\SYN.caffe.ConcatParameter\DC2?\n\SYNcontrastive_loss_param\CANi \SOH(\v2\US.caffe.ContrastiveLossParameter\DC26\n\DC1convolution_param\CANj \SOH(\v2\ESC.caffe.ConvolutionParameter\DC2(\n\ndata_param\CANk \SOH(\v2\DC4.caffe.DataParameter\DC2.\n\rdropout_param\CANl \SOH(\v2\ETB.caffe.DropoutParameter\DC23\n\DLEdummy_data_param\CANm \SOH(\v2\EM.caffe.DummyDataParameter\DC2.\n\reltwise_param\CANn \SOH(\v2\ETB.caffe.EltwiseParameter\DC2&\n\texp_param\CANo \SOH(\v2\DC3.caffe.ExpParameter\DC21\n\SIhdf5_data_param\CANp \SOH(\v2\CAN.caffe.HDF5DataParameter\DC25\n\DC1hdf5_output_param\CANq \SOH(\v2\SUB.caffe.HDF5OutputParameter\DC23\n\DLEhinge_loss_param\CANr \SOH(\v2\EM.caffe.HingeLossParameter\DC23\n\DLEimage_data_param\CANs \SOH(\v2\EM.caffe.ImageDataParameter\DC29\n\DC3infogain_loss_param\CANt \SOH(\v2\FS.caffe.InfogainLossParameter\DC29\n\DC3inner_product_param\CANu \SOH(\v2\FS.caffe.InnerProductParameter\DC2&\n\tlrn_param\CANv \SOH(\v2\DC3.caffe.LRNParameter\DC25\n\DC1memory_data_param\CANw \SOH(\v2\SUB.caffe.MemoryDataParameter\DC2&\n\tmvn_param\CANx \SOH(\v2\DC3.caffe.MVNParameter\DC2.\n\rpooling_param\CANy \SOH(\v2\ETB.caffe.PoolingParameter\DC2*\n\vpower_param\CANz \SOH(\v2\NAK.caffe.PowerParameter\DC2(\n\nrelu_param\CAN{ \SOH(\v2\DC4.caffe.ReLUParameter\DC2.\n\rsigmoid_param\CAN| \SOH(\v2\ETB.caffe.SigmoidParameter\DC2.\n\rsoftmax_param\CAN} \SOH(\v2\ETB.caffe.SoftmaxParameter\DC2*\n\vslice_param\CAN~ \SOH(\v2\NAK.caffe.SliceParameter\DC2(\n\ntanh_param\CAN\DEL \SOH(\v2\DC4.caffe.TanHParameter\DC23\n\SIthreshold_param\CAN\128\SOH \SOH(\v2\EM.caffe.ThresholdParameter\DC26\n\DC1window_data_param\CAN\129\SOH \SOH(\v2\SUB.caffe.WindowDataParameter\"\129\SOH\n\ETBTransformationParameter\DC2\DC2\n\ENQscale\CAN\SOH \SOH(\STX:\ETX1.0\DC2\NAK\n\ACKmirror\CAN\STX \SOH(\b:\ENQfalse\DC2\DC4\n\tcrop_size\CAN\ETX \SOH(\r:\SOH0\DC2\DC1\n\tmean_file\CAN\EOT \SOH(\t\DC2\DC2\n\nmean_value\CAN\ENQ \ETX(\STX\">\n\rLossParameter\DC2\DC4\n\fignore_label\CAN\SOH \SOH(\ENQ\DC2\ETB\n\tnormalize\CAN\STX \SOH(\b:\EOTtrue\"%\n\DC1AccuracyParameter\DC2\DLE\n\ENQtop_k\CAN\SOH \SOH(\r:\SOH1\"?\n\SIArgMaxParameter\DC2\SUB\n\vout_max_val\CAN\SOH \SOH(\b:\ENQfalse\DC2\DLE\n\ENQtop_k\CAN\STX \SOH(\r:\SOH1\"(\n\SIConcatParameter\DC2\NAK\n\nconcat_dim\CAN\SOH \SOH(\r:\SOH1\"/\n\CANContrastiveLossParameter\DC2\DC3\n\ACKmargin\CAN\SOH \SOH(\STX:\ETX1.0\"\191\ETX\n\DC4ConvolutionParameter\DC2\DC2\n\nnum_output\CAN\SOH \SOH(\r\DC2\ETB\n\tbias_term\CAN\STX \SOH(\b:\EOTtrue\DC2\SO\n\ETXpad\CAN\ETX \SOH(\r:\SOH0\DC2\DLE\n\ENQpad_h\CAN\t \SOH(\r:\SOH0\DC2\DLE\n\ENQpad_w\CAN\n \SOH(\r:\SOH0\DC2\DC3\n\vkernel_size\CAN\EOT \SOH(\r\DC2\DLE\n\bkernel_h\CAN\v \SOH(\r\DC2\DLE\n\bkernel_w\CAN\f \SOH(\r\DC2\DLE\n\ENQgroup\CAN\ENQ \SOH(\r:\SOH1\DC2\DC1\n\ACKstride\CAN\ACK \SOH(\r:\SOH1\DC2\DLE\n\bstride_h\CAN\r \SOH(\r\DC2\DLE\n\bstride_w\CAN\SO \SOH(\r\DC2-\n\rweight_filler\CAN\a \SOH(\v2\SYN.caffe.FillerParameter\DC2+\n\vbias_filler\CAN\b \SOH(\v2\SYN.caffe.FillerParameter\DC2;\n\ACKengine\CAN\SI \SOH(\SO2\".caffe.ConvolutionParameter.Engine:\aDEFAULT\"+\n\ACKEngine\DC2\v\n\aDEFAULT\DLE\NUL\DC2\t\n\ENQCAFFE\DLE\SOH\DC2\t\n\ENQCUDNN\DLE\STX\"\237\SOH\n\rDataParameter\DC2\SO\n\ACKsource\CAN\SOH \SOH(\t\DC2\DC2\n\nbatch_size\CAN\EOT \SOH(\r\DC2\DC4\n\trand_skip\CAN\a \SOH(\r:\SOH0\DC21\n\abackend\CAN\b \SOH(\SO2\ETB.caffe.DataParameter.DB:\aLEVELDB\DC2\DC2\n\ENQscale\CAN\STX \SOH(\STX:\ETX1.0\DC2\DC1\n\tmean_file\CAN\ETX \SOH(\t\DC2\DC4\n\tcrop_size\CAN\ENQ \SOH(\r:\SOH0\DC2\NAK\n\ACKmirror\CAN\ACK \SOH(\b:\ENQfalse\"\ESC\n\STXDB\DC2\v\n\aLEVELDB\DLE\NUL\DC2\b\n\EOTLMDB\DLE\SOH\".\n\DLEDropoutParameter\DC2\SUB\n\rdropout_ratio\CAN\SOH \SOH(\STX:\ETX0.5\"\DEL\n\DC2DummyDataParameter\DC2+\n\vdata_filler\CAN\SOH \ETX(\v2\SYN.caffe.FillerParameter\DC2\v\n\ETXnum\CAN\STX \ETX(\r\DC2\DLE\n\bchannels\CAN\ETX \ETX(\r\DC2\SO\n\ACKheight\CAN\EOT \ETX(\r\DC2\r\n\ENQwidth\CAN\ENQ \ETX(\r\"\165\SOH\n\DLEEltwiseParameter\DC29\n\toperation\CAN\SOH \SOH(\SO2!.caffe.EltwiseParameter.EltwiseOp:\ETXSUM\DC2\r\n\ENQcoeff\CAN\STX \ETX(\STX\DC2\RS\n\DLEstable_prod_grad\CAN\ETX \SOH(\b:\EOTtrue\"'\n\tEltwiseOp\DC2\b\n\EOTPROD\DLE\NUL\DC2\a\n\ETXSUM\DLE\SOH\DC2\a\n\ETXMAX\DLE\STX\"J\n\fExpParameter\DC2\DC2\n\EOTbase\CAN\SOH \SOH(\STX:\EOT-1.0\DC2\DC2\n\ENQscale\CAN\STX \SOH(\STX:\ETX1.0\DC2\DC2\n\ENQshift\CAN\ETX \SOH(\STX:\ETX0.0\"7\n\DC1HDF5DataParameter\DC2\SO\n\ACKsource\CAN\SOH \SOH(\t\DC2\DC2\n\nbatch_size\CAN\STX \SOH(\r\"(\n\DC3HDF5OutputParameter\DC2\DC1\n\tfile_name\CAN\SOH \SOH(\t\"^\n\DC2HingeLossParameter\DC20\n\EOTnorm\CAN\SOH \SOH(\SO2\RS.caffe.HingeLossParameter.Norm:\STXL1\"\SYN\n\EOTNorm\DC2\ACK\n\STXL1\DLE\SOH\DC2\ACK\n\STXL2\DLE\STX\"\150\STX\n\DC2ImageDataParameter\DC2\SO\n\ACKsource\CAN\SOH \SOH(\t\DC2\DC2\n\nbatch_size\CAN\EOT \SOH(\r\DC2\DC4\n\trand_skip\CAN\a \SOH(\r:\SOH0\DC2\SYN\n\ashuffle\CAN\b \SOH(\b:\ENQfalse\DC2\NAK\n\nnew_height\CAN\t \SOH(\r:\SOH0\DC2\DC4\n\tnew_width\CAN\n \SOH(\r:\SOH0\DC2\SYN\n\bis_color\CAN\v \SOH(\b:\EOTtrue\DC2\DC2\n\ENQscale\CAN\STX \SOH(\STX:\ETX1.0\DC2\DC1\n\tmean_file\CAN\ETX \SOH(\t\DC2\DC4\n\tcrop_size\CAN\ENQ \SOH(\r:\SOH0\DC2\NAK\n\ACKmirror\CAN\ACK \SOH(\b:\ENQfalse\DC2\NAK\n\vroot_folder\CAN\f \SOH(\t:\NUL\"'\n\NAKInfogainLossParameter\DC2\SO\n\ACKsource\CAN\SOH \SOH(\t\"\160\SOH\n\NAKInnerProductParameter\DC2\DC2\n\nnum_output\CAN\SOH \SOH(\r\DC2\ETB\n\tbias_term\CAN\STX \SOH(\b:\EOTtrue\DC2-\n\rweight_filler\CAN\ETX \SOH(\v2\SYN.caffe.FillerParameter\DC2+\n\vbias_filler\CAN\EOT \SOH(\v2\SYN.caffe.FillerParameter\"\218\SOH\n\fLRNParameter\DC2\NAK\n\nlocal_size\CAN\SOH \SOH(\r:\SOH5\DC2\DC2\n\ENQalpha\CAN\STX \SOH(\STX:\ETX1.0\DC2\DC2\n\EOTbeta\CAN\ETX \SOH(\STX:\EOT0.75\DC2D\n\vnorm_region\CAN\EOT \SOH(\SO2\RS.caffe.LRNParameter.NormRegion:\SIACROSS_CHANNELS\DC2\SO\n\SOHk\CAN\ENQ \SOH(\STX:\ETX1.0\"5\n\nNormRegion\DC2\DC3\n\SIACROSS_CHANNELS\DLE\NUL\DC2\DC2\n\SOWITHIN_CHANNEL\DLE\SOH\"Z\n\DC3MemoryDataParameter\DC2\DC2\n\nbatch_size\CAN\SOH \SOH(\r\DC2\DLE\n\bchannels\CAN\STX \SOH(\r\DC2\SO\n\ACKheight\CAN\ETX \SOH(\r\DC2\r\n\ENQwidth\CAN\EOT \SOH(\r\"P\n\fMVNParameter\DC2 \n\DC2normalize_variance\CAN\SOH \SOH(\b:\EOTtrue\DC2\RS\n\SIacross_channels\CAN\STX \SOH(\b:\ENQfalse\"\162\ETX\n\DLEPoolingParameter\DC25\n\EOTpool\CAN\SOH \SOH(\SO2\".caffe.PoolingParameter.PoolMethod:\ETXMAX\DC2\SO\n\ETXpad\CAN\EOT \SOH(\r:\SOH0\DC2\DLE\n\ENQpad_h\CAN\t \SOH(\r:\SOH0\DC2\DLE\n\ENQpad_w\CAN\n \SOH(\r:\SOH0\DC2\DC3\n\vkernel_size\CAN\STX \SOH(\r\DC2\DLE\n\bkernel_h\CAN\ENQ \SOH(\r\DC2\DLE\n\bkernel_w\CAN\ACK \SOH(\r\DC2\DC1\n\ACKstride\CAN\ETX \SOH(\r:\SOH1\DC2\DLE\n\bstride_h\CAN\a \SOH(\r\DC2\DLE\n\bstride_w\CAN\b \SOH(\r\DC27\n\ACKengine\CAN\v \SOH(\SO2\RS.caffe.PoolingParameter.Engine:\aDEFAULT\DC2\GS\n\SOglobal_pooling\CAN\f \SOH(\b:\ENQfalse\".\n\nPoolMethod\DC2\a\n\ETXMAX\DLE\NUL\DC2\a\n\ETXAVE\DLE\SOH\DC2\SO\n\nSTOCHASTIC\DLE\STX\"+\n\ACKEngine\DC2\v\n\aDEFAULT\DLE\NUL\DC2\t\n\ENQCAFFE\DLE\SOH\DC2\t\n\ENQCUDNN\DLE\STX\"L\n\SOPowerParameter\DC2\DC2\n\ENQpower\CAN\SOH \SOH(\STX:\ETX1.0\DC2\DC2\n\ENQscale\CAN\STX \SOH(\STX:\ETX1.0\DC2\DC2\n\ENQshift\CAN\ETX \SOH(\STX:\ETX0.0\"\143\SOH\n\rReLUParameter\DC2\ESC\n\SOnegative_slope\CAN\SOH \SOH(\STX:\ETX0.0\DC24\n\ACKengine\CAN\STX \SOH(\SO2\ESC.caffe.ReLUParameter.Engine:\aDEFAULT\"+\n\ACKEngine\DC2\v\n\aDEFAULT\DLE\NUL\DC2\t\n\ENQCAFFE\DLE\SOH\DC2\t\n\ENQCUDNN\DLE\STX\"x\n\DLESigmoidParameter\DC27\n\ACKengine\CAN\SOH \SOH(\SO2\RS.caffe.SigmoidParameter.Engine:\aDEFAULT\"+\n\ACKEngine\DC2\v\n\aDEFAULT\DLE\NUL\DC2\t\n\ENQCAFFE\DLE\SOH\DC2\t\n\ENQCUDNN\DLE\STX\";\n\SOSliceParameter\DC2\DC4\n\tslice_dim\CAN\SOH \SOH(\r:\SOH1\DC2\DC3\n\vslice_point\CAN\STX \ETX(\r\"x\n\DLESoftmaxParameter\DC27\n\ACKengine\CAN\SOH \SOH(\SO2\RS.caffe.SoftmaxParameter.Engine:\aDEFAULT\"+\n\ACKEngine\DC2\v\n\aDEFAULT\DLE\NUL\DC2\t\n\ENQCAFFE\DLE\SOH\DC2\t\n\ENQCUDNN\DLE\STX\"r\n\rTanHParameter\DC24\n\ACKengine\CAN\SOH \SOH(\SO2\ESC.caffe.TanHParameter.Engine:\aDEFAULT\"+\n\ACKEngine\DC2\v\n\aDEFAULT\DLE\NUL\DC2\t\n\ENQCAFFE\DLE\SOH\DC2\t\n\ENQCUDNN\DLE\STX\",\n\DC2ThresholdParameter\DC2\SYN\n\tthreshold\CAN\SOH \SOH(\STX:\ETX0.0\"\195\STX\n\DC3WindowDataParameter\DC2\SO\n\ACKsource\CAN\SOH \SOH(\t\DC2\DC2\n\ENQscale\CAN\STX \SOH(\STX:\ETX1.0\DC2\DC1\n\tmean_file\CAN\ETX \SOH(\t\DC2\DC2\n\nbatch_size\CAN\EOT \SOH(\r\DC2\DC4\n\tcrop_size\CAN\ENQ \SOH(\r:\SOH0\DC2\NAK\n\ACKmirror\CAN\ACK \SOH(\b:\ENQfalse\DC2\EM\n\ffg_threshold\CAN\a \SOH(\STX:\ETX0.5\DC2\EM\n\fbg_threshold\CAN\b \SOH(\STX:\ETX0.5\DC2\EM\n\vfg_fraction\CAN\t \SOH(\STX:\EOT0.25\DC2\SYN\n\vcontext_pad\CAN\n \SOH(\r:\SOH0\DC2\ETB\n\tcrop_mode\CAN\v \SOH(\t:\EOTwarp\DC2\ESC\n\fcache_images\CAN\f \SOH(\b:\ENQfalse\DC2\NAK\n\vroot_folder\CAN\r \SOH(\t:\NUL\"\224\DC3\n\DLEV1LayerParameter\DC2\SO\n\ACKbottom\CAN\STX \ETX(\t\DC2\v\n\ETXtop\CAN\ETX \ETX(\t\DC2\f\n\EOTname\CAN\EOT \SOH(\t\DC2$\n\ainclude\CAN  \ETX(\v2\DC3.caffe.NetStateRule\DC2$\n\aexclude\CAN! \ETX(\v2\DC3.caffe.NetStateRule\DC2/\n\EOTtype\CAN\ENQ \SOH(\SO2!.caffe.V1LayerParameter.LayerType\DC2\US\n\ENQblobs\CAN\ACK \ETX(\v2\DLE.caffe.BlobProto\DC2\SO\n\ENQparam\CAN\233\a \ETX(\t\DC2>\n\SIblob_share_mode\CAN\234\a \ETX(\SO2$.caffe.V1LayerParameter.DimCheckMode\DC2\DLE\n\bblobs_lr\CAN\a \ETX(\STX\DC2\DC4\n\fweight_decay\CAN\b \ETX(\STX\DC2\DC3\n\vloss_weight\CAN# \ETX(\STX\DC20\n\SOaccuracy_param\CAN\ESC \SOH(\v2\CAN.caffe.AccuracyParameter\DC2,\n\fargmax_param\CAN\ETB \SOH(\v2\SYN.caffe.ArgMaxParameter\DC2,\n\fconcat_param\CAN\t \SOH(\v2\SYN.caffe.ConcatParameter\DC2?\n\SYNcontrastive_loss_param\CAN( \SOH(\v2\US.caffe.ContrastiveLossParameter\DC26\n\DC1convolution_param\CAN\n \SOH(\v2\ESC.caffe.ConvolutionParameter\DC2(\n\ndata_param\CAN\v \SOH(\v2\DC4.caffe.DataParameter\DC2.\n\rdropout_param\CAN\f \SOH(\v2\ETB.caffe.DropoutParameter\DC23\n\DLEdummy_data_param\CAN\SUB \SOH(\v2\EM.caffe.DummyDataParameter\DC2.\n\reltwise_param\CAN\CAN \SOH(\v2\ETB.caffe.EltwiseParameter\DC2&\n\texp_param\CAN) \SOH(\v2\DC3.caffe.ExpParameter\DC21\n\SIhdf5_data_param\CAN\r \SOH(\v2\CAN.caffe.HDF5DataParameter\DC25\n\DC1hdf5_output_param\CAN\SO \SOH(\v2\SUB.caffe.HDF5OutputParameter\DC23\n\DLEhinge_loss_param\CAN\GS \SOH(\v2\EM.caffe.HingeLossParameter\DC23\n\DLEimage_data_param\CAN\SI \SOH(\v2\EM.caffe.ImageDataParameter\DC29\n\DC3infogain_loss_param\CAN\DLE \SOH(\v2\FS.caffe.InfogainLossParameter\DC29\n\DC3inner_product_param\CAN\DC1 \SOH(\v2\FS.caffe.InnerProductParameter\DC2&\n\tlrn_param\CAN\DC2 \SOH(\v2\DC3.caffe.LRNParameter\DC25\n\DC1memory_data_param\CAN\SYN \SOH(\v2\SUB.caffe.MemoryDataParameter\DC2&\n\tmvn_param\CAN\" \SOH(\v2\DC3.caffe.MVNParameter\DC2.\n\rpooling_param\CAN\DC3 \SOH(\v2\ETB.caffe.PoolingParameter\DC2*\n\vpower_param\CAN\NAK \SOH(\v2\NAK.caffe.PowerParameter\DC2(\n\nrelu_param\CAN\RS \SOH(\v2\DC4.caffe.ReLUParameter\DC2.\n\rsigmoid_param\CAN& \SOH(\v2\ETB.caffe.SigmoidParameter\DC2.\n\rsoftmax_param\CAN' \SOH(\v2\ETB.caffe.SoftmaxParameter\DC2*\n\vslice_param\CAN\US \SOH(\v2\NAK.caffe.SliceParameter\DC2(\n\ntanh_param\CAN% \SOH(\v2\DC4.caffe.TanHParameter\DC22\n\SIthreshold_param\CAN\EM \SOH(\v2\EM.caffe.ThresholdParameter\DC25\n\DC1window_data_param\CAN\DC4 \SOH(\v2\SUB.caffe.WindowDataParameter\DC27\n\SItransform_param\CAN$ \SOH(\v2\RS.caffe.TransformationParameter\DC2(\n\nloss_param\CAN* \SOH(\v2\DC4.caffe.LossParameter\DC2&\n\ENQlayer\CAN\SOH \SOH(\v2\ETB.caffe.V0LayerParameter\"\216\EOT\n\tLayerType\DC2\b\n\EOTNONE\DLE\NUL\DC2\n\n\ACKABSVAL\DLE#\DC2\f\n\bACCURACY\DLE\SOH\DC2\n\n\ACKARGMAX\DLE\RS\DC2\b\n\EOTBNLL\DLE\STX\DC2\n\n\ACKCONCAT\DLE\ETX\DC2\DC4\n\DLECONTRASTIVE_LOSS\DLE%\DC2\SI\n\vCONVOLUTION\DLE\EOT\DC2\b\n\EOTDATA\DLE\ENQ\DC2\DC1\n\rDECONVOLUTION\DLE'\DC2\v\n\aDROPOUT\DLE\ACK\DC2\SO\n\nDUMMY_DATA\DLE \DC2\DC2\n\SOEUCLIDEAN_LOSS\DLE\a\DC2\v\n\aELTWISE\DLE\EM\DC2\a\n\ETXEXP\DLE&\DC2\v\n\aFLATTEN\DLE\b\DC2\r\n\tHDF5_DATA\DLE\t\DC2\SI\n\vHDF5_OUTPUT\DLE\n\DC2\SO\n\nHINGE_LOSS\DLE\FS\DC2\n\n\ACKIM2COL\DLE\v\DC2\SO\n\nIMAGE_DATA\DLE\f\DC2\DC1\n\rINFOGAIN_LOSS\DLE\r\DC2\DC1\n\rINNER_PRODUCT\DLE\SO\DC2\a\n\ETXLRN\DLE\SI\DC2\SI\n\vMEMORY_DATA\DLE\GS\DC2\GS\n\EMMULTINOMIAL_LOGISTIC_LOSS\DLE\DLE\DC2\a\n\ETXMVN\DLE\"\DC2\v\n\aPOOLING\DLE\DC1\DC2\t\n\ENQPOWER\DLE\SUB\DC2\b\n\EOTRELU\DLE\DC2\DC2\v\n\aSIGMOID\DLE\DC3\DC2\RS\n\SUBSIGMOID_CROSS_ENTROPY_LOSS\DLE\ESC\DC2\v\n\aSILENCE\DLE$\DC2\v\n\aSOFTMAX\DLE\DC4\DC2\DLE\n\fSOFTMAX_LOSS\DLE\NAK\DC2\t\n\ENQSPLIT\DLE\SYN\DC2\t\n\ENQSLICE\DLE!\DC2\b\n\EOTTANH\DLE\ETB\DC2\SI\n\vWINDOW_DATA\DLE\CAN\DC2\r\n\tTHRESHOLD\DLE\US\"*\n\fDimCheckMode\DC2\n\n\ACKSTRICT\DLE\NUL\DC2\SO\n\nPERMISSIVE\DLE\SOH\"\131\b\n\DLEV0LayerParameter\DC2\f\n\EOTname\CAN\SOH \SOH(\t\DC2\f\n\EOTtype\CAN\STX \SOH(\t\DC2\DC2\n\nnum_output\CAN\ETX \SOH(\r\DC2\SYN\n\bbiasterm\CAN\EOT \SOH(\b:\EOTtrue\DC2-\n\rweight_filler\CAN\ENQ \SOH(\v2\SYN.caffe.FillerParameter\DC2+\n\vbias_filler\CAN\ACK \SOH(\v2\SYN.caffe.FillerParameter\DC2\SO\n\ETXpad\CAN\a \SOH(\r:\SOH0\DC2\DC2\n\nkernelsize\CAN\b \SOH(\r\DC2\DLE\n\ENQgroup\CAN\t \SOH(\r:\SOH1\DC2\DC1\n\ACKstride\CAN\n \SOH(\r:\SOH1\DC25\n\EOTpool\CAN\v \SOH(\SO2\".caffe.V0LayerParameter.PoolMethod:\ETXMAX\DC2\SUB\n\rdropout_ratio\CAN\f \SOH(\STX:\ETX0.5\DC2\NAK\n\nlocal_size\CAN\r \SOH(\r:\SOH5\DC2\DC2\n\ENQalpha\CAN\SO \SOH(\STX:\ETX1.0\DC2\DC2\n\EOTbeta\CAN\SI \SOH(\STX:\EOT0.75\DC2\SO\n\SOHk\CAN\SYN \SOH(\STX:\ETX1.0\DC2\SO\n\ACKsource\CAN\DLE \SOH(\t\DC2\DC2\n\ENQscale\CAN\DC1 \SOH(\STX:\ETX1.0\DC2\DLE\n\bmeanfile\CAN\DC2 \SOH(\t\DC2\DC1\n\tbatchsize\CAN\DC3 \SOH(\r\DC2\DC3\n\bcropsize\CAN\DC4 \SOH(\r:\SOH0\DC2\NAK\n\ACKmirror\CAN\NAK \SOH(\b:\ENQfalse\DC2\US\n\ENQblobs\CAN2 \ETX(\v2\DLE.caffe.BlobProto\DC2\DLE\n\bblobs_lr\CAN3 \ETX(\STX\DC2\DC4\n\fweight_decay\CAN4 \ETX(\STX\DC2\DC4\n\trand_skip\CAN5 \SOH(\r:\SOH0\DC2\GS\n\DLEdet_fg_threshold\CAN6 \SOH(\STX:\ETX0.5\DC2\GS\n\DLEdet_bg_threshold\CAN7 \SOH(\STX:\ETX0.5\DC2\GS\n\SIdet_fg_fraction\CAN8 \SOH(\STX:\EOT0.25\DC2\SUB\n\SIdet_context_pad\CAN: \SOH(\r:\SOH0\DC2\ESC\n\rdet_crop_mode\CAN; \SOH(\t:\EOTwarp\DC2\DC2\n\anew_num\CAN< \SOH(\ENQ:\SOH0\DC2\ETB\n\fnew_channels\CAN= \SOH(\ENQ:\SOH0\DC2\NAK\n\nnew_height\CAN> \SOH(\ENQ:\SOH0\DC2\DC4\n\tnew_width\CAN? \SOH(\ENQ:\SOH0\DC2\GS\n\SOshuffle_images\CAN@ \SOH(\b:\ENQfalse\DC2\NAK\n\nconcat_dim\CANA \SOH(\r:\SOH1\DC26\n\DC1hdf5_output_param\CAN\233\a \SOH(\v2\SUB.caffe.HDF5OutputParameter\".\n\nPoolMethod\DC2\a\n\ETXMAX\DLE\NUL\DC2\a\n\ETXAVE\DLE\SOH\DC2\SO\n\nSTOCHASTIC\DLE\STX*\FS\n\ENQPhase\DC2\t\n\ENQTRAIN\DLE\NUL\DC2\b\n\EOTTEST\DLE\SOH")
diff --git a/Gen/Caffe/AccuracyParameter.hs b/Gen/Caffe/AccuracyParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/AccuracyParameter.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.AccuracyParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data AccuracyParameter = AccuracyParameter{top_k :: !(P'.Maybe P'.Word32)}
+                       deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''AccuracyParameter
+
+ 
+instance P'.Mergeable AccuracyParameter where
+  mergeAppend (AccuracyParameter x'1) (AccuracyParameter y'1) = AccuracyParameter (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default AccuracyParameter where
+  defaultValue = AccuracyParameter (Prelude'.Just 1)
+ 
+instance P'.Wire AccuracyParameter where
+  wireSize ft' self'@(AccuracyParameter x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 13 x'1)
+  wirePut ft' self'@(AccuracyParameter x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 13 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{top_k = Prelude'.Just new'Field}) (P'.wireGet 13)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> AccuracyParameter) AccuracyParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB AccuracyParameter
+ 
+instance P'.ReflectDescriptor AccuracyParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.AccuracyParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"AccuracyParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"AccuracyParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.AccuracyParameter.top_k\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"AccuracyParameter\"], baseName' = FName \"top_k\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/ArgMaxParameter.hs b/Gen/Caffe/ArgMaxParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ArgMaxParameter.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ArgMaxParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data ArgMaxParameter = ArgMaxParameter{out_max_val :: !(P'.Maybe P'.Bool), top_k :: !(P'.Maybe P'.Word32)}
+                     deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''ArgMaxParameter
+
+ 
+instance P'.Mergeable ArgMaxParameter where
+  mergeAppend (ArgMaxParameter x'1 x'2) (ArgMaxParameter y'1 y'2)
+   = ArgMaxParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)
+ 
+instance P'.Default ArgMaxParameter where
+  defaultValue = ArgMaxParameter (Prelude'.Just Prelude'.False) (Prelude'.Just 1)
+ 
+instance P'.Wire ArgMaxParameter where
+  wireSize ft' self'@(ArgMaxParameter x'1 x'2)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 8 x'1 + P'.wireSizeOpt 1 13 x'2)
+  wirePut ft' self'@(ArgMaxParameter x'1 x'2)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 8 x'1
+             P'.wirePutOpt 16 13 x'2
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{out_max_val = Prelude'.Just new'Field}) (P'.wireGet 8)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{top_k = Prelude'.Just new'Field}) (P'.wireGet 13)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> ArgMaxParameter) ArgMaxParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB ArgMaxParameter
+ 
+instance P'.ReflectDescriptor ArgMaxParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 16])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ArgMaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ArgMaxParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ArgMaxParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ArgMaxParameter.out_max_val\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ArgMaxParameter\"], baseName' = FName \"out_max_val\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ArgMaxParameter.top_k\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ArgMaxParameter\"], baseName' = FName \"top_k\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/BlobProto.hs b/Gen/Caffe/BlobProto.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/BlobProto.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.BlobProto  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data BlobProto = BlobProto{num :: !(P'.Maybe P'.Int32), channels :: !(P'.Maybe P'.Int32), height :: !(P'.Maybe P'.Int32),
+                           width :: !(P'.Maybe P'.Int32), data' :: !(P'.Seq P'.Float), diff :: !(P'.Seq P'.Float)}
+               deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''BlobProto
+
+ 
+instance P'.Mergeable BlobProto where
+  mergeAppend (BlobProto x'1 x'2 x'3 x'4 x'5 x'6) (BlobProto y'1 y'2 y'3 y'4 y'5 y'6)
+   = BlobProto (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+ 
+instance P'.Default BlobProto where
+  defaultValue = BlobProto (Prelude'.Just 0) (Prelude'.Just 0) (Prelude'.Just 0) (Prelude'.Just 0) P'.defaultValue P'.defaultValue
+ 
+instance P'.Wire BlobProto where
+  wireSize ft' self'@(BlobProto x'1 x'2 x'3 x'4 x'5 x'6)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 5 x'1 + P'.wireSizeOpt 1 5 x'2 + P'.wireSizeOpt 1 5 x'3 + P'.wireSizeOpt 1 5 x'4 +
+             P'.wireSizePacked 1 2 x'5
+             + P'.wireSizePacked 1 2 x'6)
+  wirePut ft' self'@(BlobProto x'1 x'2 x'3 x'4 x'5 x'6)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 5 x'1
+             P'.wirePutOpt 16 5 x'2
+             P'.wirePutOpt 24 5 x'3
+             P'.wirePutOpt 32 5 x'4
+             P'.wirePutPacked 42 2 x'5
+             P'.wirePutPacked 50 2 x'6
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{num = Prelude'.Just new'Field}) (P'.wireGet 5)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{channels = Prelude'.Just new'Field}) (P'.wireGet 5)
+             24 -> Prelude'.fmap (\ !new'Field -> old'Self{height = Prelude'.Just new'Field}) (P'.wireGet 5)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{width = Prelude'.Just new'Field}) (P'.wireGet 5)
+             45 -> Prelude'.fmap (\ !new'Field -> old'Self{data' = P'.append (data' old'Self) new'Field}) (P'.wireGet 2)
+             42 -> Prelude'.fmap (\ !new'Field -> old'Self{data' = P'.mergeAppend (data' old'Self) new'Field}) (P'.wireGetPacked 2)
+             53 -> Prelude'.fmap (\ !new'Field -> old'Self{diff = P'.append (diff old'Self) new'Field}) (P'.wireGet 2)
+             50 -> Prelude'.fmap (\ !new'Field -> old'Self{diff = P'.mergeAppend (diff old'Self) new'Field}) (P'.wireGetPacked 2)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> BlobProto) BlobProto where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB BlobProto
+ 
+instance P'.ReflectDescriptor BlobProto where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 16, 24, 32, 42, 45, 50, 53])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}, descFilePath = [\"Gen\",\"Caffe\",\"BlobProto.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.num\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"num\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"channels\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"height\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"width\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.data\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"data'\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Just (WireTag {getWireTag = 45},WireTag {getWireTag = 42}), wireTagLength = 1, isPacked = True, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProto.diff\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProto\"], baseName' = FName \"diff\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 50}, packedTag = Just (WireTag {getWireTag = 53},WireTag {getWireTag = 50}), wireTagLength = 1, isPacked = True, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/BlobProtoVector.hs b/Gen/Caffe/BlobProtoVector.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/BlobProtoVector.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.BlobProtoVector  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.BlobProto as Caffe (BlobProto)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data BlobProtoVector = BlobProtoVector{blobs :: !(P'.Seq Caffe.BlobProto)}
+                     deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''BlobProtoVector
+
+ 
+instance P'.Mergeable BlobProtoVector where
+  mergeAppend (BlobProtoVector x'1) (BlobProtoVector y'1) = BlobProtoVector (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default BlobProtoVector where
+  defaultValue = BlobProtoVector P'.defaultValue
+ 
+instance P'.Wire BlobProtoVector where
+  wireSize ft' self'@(BlobProtoVector x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeRep 1 11 x'1)
+  wirePut ft' self'@(BlobProtoVector x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutRep 10 11 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{blobs = P'.append (blobs old'Self) new'Field}) (P'.wireGet 11)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> BlobProtoVector) BlobProtoVector where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB BlobProtoVector
+ 
+instance P'.ReflectDescriptor BlobProtoVector where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [10])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.BlobProtoVector\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProtoVector\"}, descFilePath = [\"Gen\",\"Caffe\",\"BlobProtoVector.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.BlobProtoVector.blobs\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"BlobProtoVector\"], baseName' = FName \"blobs\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/ConcatParameter.hs b/Gen/Caffe/ConcatParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ConcatParameter.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ConcatParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data ConcatParameter = ConcatParameter{concat_dim :: !(P'.Maybe P'.Word32)}
+                     deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''ConcatParameter
+
+ 
+instance P'.Mergeable ConcatParameter where
+  mergeAppend (ConcatParameter x'1) (ConcatParameter y'1) = ConcatParameter (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default ConcatParameter where
+  defaultValue = ConcatParameter (Prelude'.Just 1)
+ 
+instance P'.Wire ConcatParameter where
+  wireSize ft' self'@(ConcatParameter x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 13 x'1)
+  wirePut ft' self'@(ConcatParameter x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 13 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{concat_dim = Prelude'.Just new'Field}) (P'.wireGet 13)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> ConcatParameter) ConcatParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB ConcatParameter
+ 
+instance P'.ReflectDescriptor ConcatParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ConcatParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConcatParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ConcatParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConcatParameter.concat_dim\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConcatParameter\"], baseName' = FName \"concat_dim\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/ContrastiveLossParameter.hs b/Gen/Caffe/ContrastiveLossParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ContrastiveLossParameter.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ContrastiveLossParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data ContrastiveLossParameter = ContrastiveLossParameter{margin :: !(P'.Maybe P'.Float)}
+                              deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''ContrastiveLossParameter
+
+ 
+instance P'.Mergeable ContrastiveLossParameter where
+  mergeAppend (ContrastiveLossParameter x'1) (ContrastiveLossParameter y'1) = ContrastiveLossParameter (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default ContrastiveLossParameter where
+  defaultValue = ContrastiveLossParameter (Prelude'.Just 1.0)
+ 
+instance P'.Wire ContrastiveLossParameter where
+  wireSize ft' self'@(ContrastiveLossParameter x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 2 x'1)
+  wirePut ft' self'@(ContrastiveLossParameter x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 13 2 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             13 -> Prelude'.fmap (\ !new'Field -> old'Self{margin = Prelude'.Just new'Field}) (P'.wireGet 2)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> ContrastiveLossParameter) ContrastiveLossParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB ContrastiveLossParameter
+ 
+instance P'.ReflectDescriptor ContrastiveLossParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [13])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ContrastiveLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ContrastiveLossParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ContrastiveLossParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ContrastiveLossParameter.margin\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ContrastiveLossParameter\"], baseName' = FName \"margin\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/ConvolutionParameter.hs b/Gen/Caffe/ConvolutionParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ConvolutionParameter.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ConvolutionParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.ConvolutionParameter.Engine as Caffe.ConvolutionParameter (Engine)
+import qualified Gen.Caffe.FillerParameter as Caffe (FillerParameter)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data ConvolutionParameter = ConvolutionParameter{num_output :: !(P'.Maybe P'.Word32), bias_term :: !(P'.Maybe P'.Bool),
+                                                 pad :: !(P'.Maybe P'.Word32), pad_h :: !(P'.Maybe P'.Word32),
+                                                 pad_w :: !(P'.Maybe P'.Word32), kernel_size :: !(P'.Maybe P'.Word32),
+                                                 kernel_h :: !(P'.Maybe P'.Word32), kernel_w :: !(P'.Maybe P'.Word32),
+                                                 group :: !(P'.Maybe P'.Word32), stride :: !(P'.Maybe P'.Word32),
+                                                 stride_h :: !(P'.Maybe P'.Word32), stride_w :: !(P'.Maybe P'.Word32),
+                                                 weight_filler :: !(P'.Maybe Caffe.FillerParameter),
+                                                 bias_filler :: !(P'.Maybe Caffe.FillerParameter),
+                                                 engine :: !(P'.Maybe Caffe.ConvolutionParameter.Engine)}
+                          deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''ConvolutionParameter
+
+ 
+instance P'.Mergeable ConvolutionParameter where
+  mergeAppend (ConvolutionParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15)
+   (ConvolutionParameter y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9 y'10 y'11 y'12 y'13 y'14 y'15)
+   = ConvolutionParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+      (P'.mergeAppend x'8 y'8)
+      (P'.mergeAppend x'9 y'9)
+      (P'.mergeAppend x'10 y'10)
+      (P'.mergeAppend x'11 y'11)
+      (P'.mergeAppend x'12 y'12)
+      (P'.mergeAppend x'13 y'13)
+      (P'.mergeAppend x'14 y'14)
+      (P'.mergeAppend x'15 y'15)
+ 
+instance P'.Default ConvolutionParameter where
+  defaultValue
+   = ConvolutionParameter P'.defaultValue (Prelude'.Just Prelude'.True) (Prelude'.Just 0) (Prelude'.Just 0) (Prelude'.Just 0)
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      (Prelude'.Just 1)
+      (Prelude'.Just 1)
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      (Prelude'.Just (Prelude'.read "DEFAULT"))
+ 
+instance P'.Wire ConvolutionParameter where
+  wireSize ft' self'@(ConvolutionParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 13 x'1 + P'.wireSizeOpt 1 8 x'2 + P'.wireSizeOpt 1 13 x'3 + P'.wireSizeOpt 1 13 x'4 +
+             P'.wireSizeOpt 1 13 x'5
+             + P'.wireSizeOpt 1 13 x'6
+             + P'.wireSizeOpt 1 13 x'7
+             + P'.wireSizeOpt 1 13 x'8
+             + P'.wireSizeOpt 1 13 x'9
+             + P'.wireSizeOpt 1 13 x'10
+             + P'.wireSizeOpt 1 13 x'11
+             + P'.wireSizeOpt 1 13 x'12
+             + P'.wireSizeOpt 1 11 x'13
+             + P'.wireSizeOpt 1 11 x'14
+             + P'.wireSizeOpt 1 14 x'15)
+  wirePut ft' self'@(ConvolutionParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 13 x'1
+             P'.wirePutOpt 16 8 x'2
+             P'.wirePutOpt 24 13 x'3
+             P'.wirePutOpt 32 13 x'6
+             P'.wirePutOpt 40 13 x'9
+             P'.wirePutOpt 48 13 x'10
+             P'.wirePutOpt 58 11 x'13
+             P'.wirePutOpt 66 11 x'14
+             P'.wirePutOpt 72 13 x'4
+             P'.wirePutOpt 80 13 x'5
+             P'.wirePutOpt 88 13 x'7
+             P'.wirePutOpt 96 13 x'8
+             P'.wirePutOpt 104 13 x'11
+             P'.wirePutOpt 112 13 x'12
+             P'.wirePutOpt 120 14 x'15
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{num_output = Prelude'.Just new'Field}) (P'.wireGet 13)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{bias_term = Prelude'.Just new'Field}) (P'.wireGet 8)
+             24 -> Prelude'.fmap (\ !new'Field -> old'Self{pad = Prelude'.Just new'Field}) (P'.wireGet 13)
+             72 -> Prelude'.fmap (\ !new'Field -> old'Self{pad_h = Prelude'.Just new'Field}) (P'.wireGet 13)
+             80 -> Prelude'.fmap (\ !new'Field -> old'Self{pad_w = Prelude'.Just new'Field}) (P'.wireGet 13)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{kernel_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             88 -> Prelude'.fmap (\ !new'Field -> old'Self{kernel_h = Prelude'.Just new'Field}) (P'.wireGet 13)
+             96 -> Prelude'.fmap (\ !new'Field -> old'Self{kernel_w = Prelude'.Just new'Field}) (P'.wireGet 13)
+             40 -> Prelude'.fmap (\ !new'Field -> old'Self{group = Prelude'.Just new'Field}) (P'.wireGet 13)
+             48 -> Prelude'.fmap (\ !new'Field -> old'Self{stride = Prelude'.Just new'Field}) (P'.wireGet 13)
+             104 -> Prelude'.fmap (\ !new'Field -> old'Self{stride_h = Prelude'.Just new'Field}) (P'.wireGet 13)
+             112 -> Prelude'.fmap (\ !new'Field -> old'Self{stride_w = Prelude'.Just new'Field}) (P'.wireGet 13)
+             58 -> Prelude'.fmap
+                    (\ !new'Field -> old'Self{weight_filler = P'.mergeAppend (weight_filler old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             66 -> Prelude'.fmap
+                    (\ !new'Field -> old'Self{bias_filler = P'.mergeAppend (bias_filler old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             120 -> Prelude'.fmap (\ !new'Field -> old'Self{engine = Prelude'.Just new'Field}) (P'.wireGet 14)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> ConvolutionParameter) ConvolutionParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB ConvolutionParameter
+ 
+instance P'.ReflectDescriptor ConvolutionParameter where
+  getMessageInfo _
+   = P'.GetMessageInfo (P'.fromDistinctAscList [])
+      (P'.fromDistinctAscList [8, 16, 24, 32, 40, 48, 58, 66, 72, 80, 88, 96, 104, 112, 120])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ConvolutionParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConvolutionParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ConvolutionParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.num_output\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"num_output\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.bias_term\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"bias_term\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.pad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"pad\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.pad_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"pad_h\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 72}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.pad_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"pad_w\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 80}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.kernel_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"kernel_size\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.kernel_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"kernel_h\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.kernel_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"kernel_w\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 96}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.group\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"group\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.stride\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"stride\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.stride_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"stride_h\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 104}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.stride_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"stride_w\"}, fieldNumber = FieldId {getFieldId = 14}, wireTag = WireTag {getWireTag = 112}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.weight_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"weight_filler\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 58}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.bias_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"bias_filler\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 66}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ConvolutionParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 15}, wireTag = WireTag {getWireTag = 120}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ConvolutionParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"ConvolutionParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/ConvolutionParameter/Engine.hs b/Gen/Caffe/ConvolutionParameter/Engine.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ConvolutionParameter/Engine.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ConvolutionParameter.Engine  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data Engine = DEFAULT
+            | CAFFE
+            | CUDNN
+            deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''Engine
+
+ 
+instance P'.Mergeable Engine
+ 
+instance Prelude'.Bounded Engine where
+  minBound = DEFAULT
+  maxBound = CUDNN
+ 
+instance P'.Default Engine where
+  defaultValue = DEFAULT
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe Engine
+toMaybe'Enum 0 = Prelude'.Just DEFAULT
+toMaybe'Enum 1 = Prelude'.Just CAFFE
+toMaybe'Enum 2 = Prelude'.Just CUDNN
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum Engine where
+  fromEnum DEFAULT = 0
+  fromEnum CAFFE = 1
+  fromEnum CUDNN = 2
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.ConvolutionParameter.Engine") .
+      toMaybe'Enum
+  succ DEFAULT = CAFFE
+  succ CAFFE = CUDNN
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.ConvolutionParameter.Engine"
+  pred CAFFE = DEFAULT
+  pred CUDNN = CAFFE
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.ConvolutionParameter.Engine"
+ 
+instance P'.Wire Engine where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB Engine
+ 
+instance P'.MessageAPI msg' (msg' -> Engine) Engine where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum Engine where
+  reflectEnum = [(0, "DEFAULT", DEFAULT), (1, "CAFFE", CAFFE), (2, "CUDNN", CUDNN)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.ConvolutionParameter.Engine") ["Gen"] ["Caffe", "ConvolutionParameter"] "Engine")
+      ["Gen", "Caffe", "ConvolutionParameter", "Engine.hs"]
+      [(0, "DEFAULT"), (1, "CAFFE"), (2, "CUDNN")]
diff --git a/Gen/Caffe/DataParameter.hs b/Gen/Caffe/DataParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/DataParameter.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.DataParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.DataParameter.DB as Caffe.DataParameter (DB)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data DataParameter = DataParameter{source :: !(P'.Maybe P'.Utf8), batch_size :: !(P'.Maybe P'.Word32),
+                                   rand_skip :: !(P'.Maybe P'.Word32), backend :: !(P'.Maybe Caffe.DataParameter.DB),
+                                   scale :: !(P'.Maybe P'.Float), mean_file :: !(P'.Maybe P'.Utf8),
+                                   crop_size :: !(P'.Maybe P'.Word32), mirror :: !(P'.Maybe P'.Bool)}
+                   deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''DataParameter
+
+ 
+instance P'.Mergeable DataParameter where
+  mergeAppend (DataParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8) (DataParameter y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8)
+   = DataParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+      (P'.mergeAppend x'8 y'8)
+ 
+instance P'.Default DataParameter where
+  defaultValue
+   = DataParameter P'.defaultValue P'.defaultValue (Prelude'.Just 0) (Prelude'.Just (Prelude'.read "LEVELDB")) (Prelude'.Just 1.0)
+      P'.defaultValue
+      (Prelude'.Just 0)
+      (Prelude'.Just Prelude'.False)
+ 
+instance P'.Wire DataParameter where
+  wireSize ft' self'@(DataParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 9 x'1 + P'.wireSizeOpt 1 13 x'2 + P'.wireSizeOpt 1 13 x'3 + P'.wireSizeOpt 1 14 x'4 +
+             P'.wireSizeOpt 1 2 x'5
+             + P'.wireSizeOpt 1 9 x'6
+             + P'.wireSizeOpt 1 13 x'7
+             + P'.wireSizeOpt 1 8 x'8)
+  wirePut ft' self'@(DataParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'1
+             P'.wirePutOpt 21 2 x'5
+             P'.wirePutOpt 26 9 x'6
+             P'.wirePutOpt 32 13 x'2
+             P'.wirePutOpt 40 13 x'7
+             P'.wirePutOpt 48 8 x'8
+             P'.wirePutOpt 56 13 x'3
+             P'.wirePutOpt 64 14 x'4
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{source = Prelude'.Just new'Field}) (P'.wireGet 9)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{batch_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             56 -> Prelude'.fmap (\ !new'Field -> old'Self{rand_skip = Prelude'.Just new'Field}) (P'.wireGet 13)
+             64 -> Prelude'.fmap (\ !new'Field -> old'Self{backend = Prelude'.Just new'Field}) (P'.wireGet 14)
+             21 -> Prelude'.fmap (\ !new'Field -> old'Self{scale = Prelude'.Just new'Field}) (P'.wireGet 2)
+             26 -> Prelude'.fmap (\ !new'Field -> old'Self{mean_file = Prelude'.Just new'Field}) (P'.wireGet 9)
+             40 -> Prelude'.fmap (\ !new'Field -> old'Self{crop_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             48 -> Prelude'.fmap (\ !new'Field -> old'Self{mirror = Prelude'.Just new'Field}) (P'.wireGet 8)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> DataParameter) DataParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB DataParameter
+ 
+instance P'.ReflectDescriptor DataParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [10, 21, 26, 32, 40, 48, 56, 64])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"DataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.batch_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"batch_size\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.rand_skip\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"rand_skip\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.backend\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"backend\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DataParameter.DB\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"DataParameter\"], baseName = MName \"DB\"}), hsRawDefault = Just \"LEVELDB\", hsDefault = Just (HsDef'Enum \"LEVELDB\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.mean_file\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"mean_file\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.crop_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"crop_size\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DataParameter.mirror\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DataParameter\"], baseName' = FName \"mirror\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/DataParameter/DB.hs b/Gen/Caffe/DataParameter/DB.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/DataParameter/DB.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.DataParameter.DB  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data DB = LEVELDB
+        | LMDB
+        deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''DB
+
+ 
+instance P'.Mergeable DB
+ 
+instance Prelude'.Bounded DB where
+  minBound = LEVELDB
+  maxBound = LMDB
+ 
+instance P'.Default DB where
+  defaultValue = LEVELDB
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe DB
+toMaybe'Enum 0 = Prelude'.Just LEVELDB
+toMaybe'Enum 1 = Prelude'.Just LMDB
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum DB where
+  fromEnum LEVELDB = 0
+  fromEnum LMDB = 1
+  toEnum = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.DataParameter.DB") . toMaybe'Enum
+  succ LEVELDB = LMDB
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.DataParameter.DB"
+  pred LMDB = LEVELDB
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.DataParameter.DB"
+ 
+instance P'.Wire DB where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB DB
+ 
+instance P'.MessageAPI msg' (msg' -> DB) DB where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum DB where
+  reflectEnum = [(0, "LEVELDB", LEVELDB), (1, "LMDB", LMDB)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.DataParameter.DB") ["Gen"] ["Caffe", "DataParameter"] "DB")
+      ["Gen", "Caffe", "DataParameter", "DB.hs"]
+      [(0, "LEVELDB"), (1, "LMDB")]
diff --git a/Gen/Caffe/Datum.hs b/Gen/Caffe/Datum.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/Datum.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.Datum  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data Datum = Datum{channels :: !(P'.Maybe P'.Int32), height :: !(P'.Maybe P'.Int32), width :: !(P'.Maybe P'.Int32),
+                   data' :: !(P'.Maybe P'.ByteString), label :: !(P'.Maybe P'.Int32), float_data :: !(P'.Seq P'.Float),
+                   encoded :: !(P'.Maybe P'.Bool)}
+           deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''Datum
+
+ 
+instance P'.Mergeable Datum where
+  mergeAppend (Datum x'1 x'2 x'3 x'4 x'5 x'6 x'7) (Datum y'1 y'2 y'3 y'4 y'5 y'6 y'7)
+   = Datum (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+ 
+instance P'.Default Datum where
+  defaultValue
+   = Datum P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue
+      (Prelude'.Just Prelude'.False)
+ 
+instance P'.Wire Datum where
+  wireSize ft' self'@(Datum x'1 x'2 x'3 x'4 x'5 x'6 x'7)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 5 x'1 + P'.wireSizeOpt 1 5 x'2 + P'.wireSizeOpt 1 5 x'3 + P'.wireSizeOpt 1 12 x'4 +
+             P'.wireSizeOpt 1 5 x'5
+             + P'.wireSizeRep 1 2 x'6
+             + P'.wireSizeOpt 1 8 x'7)
+  wirePut ft' self'@(Datum x'1 x'2 x'3 x'4 x'5 x'6 x'7)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 5 x'1
+             P'.wirePutOpt 16 5 x'2
+             P'.wirePutOpt 24 5 x'3
+             P'.wirePutOpt 34 12 x'4
+             P'.wirePutOpt 40 5 x'5
+             P'.wirePutRep 53 2 x'6
+             P'.wirePutOpt 56 8 x'7
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{channels = Prelude'.Just new'Field}) (P'.wireGet 5)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{height = Prelude'.Just new'Field}) (P'.wireGet 5)
+             24 -> Prelude'.fmap (\ !new'Field -> old'Self{width = Prelude'.Just new'Field}) (P'.wireGet 5)
+             34 -> Prelude'.fmap (\ !new'Field -> old'Self{data' = Prelude'.Just new'Field}) (P'.wireGet 12)
+             40 -> Prelude'.fmap (\ !new'Field -> old'Self{label = Prelude'.Just new'Field}) (P'.wireGet 5)
+             53 -> Prelude'.fmap (\ !new'Field -> old'Self{float_data = P'.append (float_data old'Self) new'Field}) (P'.wireGet 2)
+             50 -> Prelude'.fmap (\ !new'Field -> old'Self{float_data = P'.mergeAppend (float_data old'Self) new'Field})
+                    (P'.wireGetPacked 2)
+             56 -> Prelude'.fmap (\ !new'Field -> old'Self{encoded = Prelude'.Just new'Field}) (P'.wireGet 8)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> Datum) Datum where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB Datum
+ 
+instance P'.ReflectDescriptor Datum where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 16, 24, 34, 40, 50, 53, 56])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.Datum\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"Datum\"}, descFilePath = [\"Gen\",\"Caffe\",\"Datum.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"channels\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"height\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"width\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.data\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"data'\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 12}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.label\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"label\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.float_data\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"float_data\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 53}, packedTag = Just (WireTag {getWireTag = 53},WireTag {getWireTag = 50}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.Datum.encoded\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"Datum\"], baseName' = FName \"encoded\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/DropoutParameter.hs b/Gen/Caffe/DropoutParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/DropoutParameter.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.DropoutParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data DropoutParameter = DropoutParameter{dropout_ratio :: !(P'.Maybe P'.Float)}
+                      deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''DropoutParameter
+
+ 
+instance P'.Mergeable DropoutParameter where
+  mergeAppend (DropoutParameter x'1) (DropoutParameter y'1) = DropoutParameter (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default DropoutParameter where
+  defaultValue = DropoutParameter (Prelude'.Just 0.5)
+ 
+instance P'.Wire DropoutParameter where
+  wireSize ft' self'@(DropoutParameter x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 2 x'1)
+  wirePut ft' self'@(DropoutParameter x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 13 2 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             13 -> Prelude'.fmap (\ !new'Field -> old'Self{dropout_ratio = Prelude'.Just new'Field}) (P'.wireGet 2)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> DropoutParameter) DropoutParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB DropoutParameter
+ 
+instance P'.ReflectDescriptor DropoutParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [13])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.DropoutParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DropoutParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"DropoutParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DropoutParameter.dropout_ratio\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DropoutParameter\"], baseName' = FName \"dropout_ratio\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/DummyDataParameter.hs b/Gen/Caffe/DummyDataParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/DummyDataParameter.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.DummyDataParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.FillerParameter as Caffe (FillerParameter)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data DummyDataParameter = DummyDataParameter{data_filler :: !(P'.Seq Caffe.FillerParameter), num :: !(P'.Seq P'.Word32),
+                                             channels :: !(P'.Seq P'.Word32), height :: !(P'.Seq P'.Word32),
+                                             width :: !(P'.Seq P'.Word32)}
+                        deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''DummyDataParameter
+
+ 
+instance P'.Mergeable DummyDataParameter where
+  mergeAppend (DummyDataParameter x'1 x'2 x'3 x'4 x'5) (DummyDataParameter y'1 y'2 y'3 y'4 y'5)
+   = DummyDataParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+ 
+instance P'.Default DummyDataParameter where
+  defaultValue = DummyDataParameter P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue
+ 
+instance P'.Wire DummyDataParameter where
+  wireSize ft' self'@(DummyDataParameter x'1 x'2 x'3 x'4 x'5)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeRep 1 11 x'1 + P'.wireSizeRep 1 13 x'2 + P'.wireSizeRep 1 13 x'3 + P'.wireSizeRep 1 13 x'4 +
+             P'.wireSizeRep 1 13 x'5)
+  wirePut ft' self'@(DummyDataParameter x'1 x'2 x'3 x'4 x'5)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutRep 10 11 x'1
+             P'.wirePutRep 16 13 x'2
+             P'.wirePutRep 24 13 x'3
+             P'.wirePutRep 32 13 x'4
+             P'.wirePutRep 40 13 x'5
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{data_filler = P'.append (data_filler old'Self) new'Field})
+                    (P'.wireGet 11)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{num = P'.append (num old'Self) new'Field}) (P'.wireGet 13)
+             18 -> Prelude'.fmap (\ !new'Field -> old'Self{num = P'.mergeAppend (num old'Self) new'Field}) (P'.wireGetPacked 13)
+             24 -> Prelude'.fmap (\ !new'Field -> old'Self{channels = P'.append (channels old'Self) new'Field}) (P'.wireGet 13)
+             26 -> Prelude'.fmap (\ !new'Field -> old'Self{channels = P'.mergeAppend (channels old'Self) new'Field})
+                    (P'.wireGetPacked 13)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{height = P'.append (height old'Self) new'Field}) (P'.wireGet 13)
+             34 -> Prelude'.fmap (\ !new'Field -> old'Self{height = P'.mergeAppend (height old'Self) new'Field})
+                    (P'.wireGetPacked 13)
+             40 -> Prelude'.fmap (\ !new'Field -> old'Self{width = P'.append (width old'Self) new'Field}) (P'.wireGet 13)
+             42 -> Prelude'.fmap (\ !new'Field -> old'Self{width = P'.mergeAppend (width old'Self) new'Field}) (P'.wireGetPacked 13)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> DummyDataParameter) DummyDataParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB DummyDataParameter
+ 
+instance P'.ReflectDescriptor DummyDataParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [10, 16, 18, 24, 26, 32, 34, 40, 42])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.DummyDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DummyDataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"DummyDataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DummyDataParameter.data_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DummyDataParameter\"], baseName' = FName \"data_filler\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DummyDataParameter.num\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DummyDataParameter\"], baseName' = FName \"num\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Just (WireTag {getWireTag = 16},WireTag {getWireTag = 18}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DummyDataParameter.channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DummyDataParameter\"], baseName' = FName \"channels\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Just (WireTag {getWireTag = 24},WireTag {getWireTag = 26}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DummyDataParameter.height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DummyDataParameter\"], baseName' = FName \"height\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Just (WireTag {getWireTag = 32},WireTag {getWireTag = 34}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.DummyDataParameter.width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"DummyDataParameter\"], baseName' = FName \"width\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Just (WireTag {getWireTag = 40},WireTag {getWireTag = 42}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/EltwiseParameter.hs b/Gen/Caffe/EltwiseParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/EltwiseParameter.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.EltwiseParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.EltwiseParameter.EltwiseOp as Caffe.EltwiseParameter (EltwiseOp)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data EltwiseParameter = EltwiseParameter{operation :: !(P'.Maybe Caffe.EltwiseParameter.EltwiseOp), coeff :: !(P'.Seq P'.Float),
+                                         stable_prod_grad :: !(P'.Maybe P'.Bool)}
+                      deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''EltwiseParameter
+
+ 
+instance P'.Mergeable EltwiseParameter where
+  mergeAppend (EltwiseParameter x'1 x'2 x'3) (EltwiseParameter y'1 y'2 y'3)
+   = EltwiseParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3)
+ 
+instance P'.Default EltwiseParameter where
+  defaultValue = EltwiseParameter (Prelude'.Just (Prelude'.read "SUM")) P'.defaultValue (Prelude'.Just Prelude'.True)
+ 
+instance P'.Wire EltwiseParameter where
+  wireSize ft' self'@(EltwiseParameter x'1 x'2 x'3)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 14 x'1 + P'.wireSizeRep 1 2 x'2 + P'.wireSizeOpt 1 8 x'3)
+  wirePut ft' self'@(EltwiseParameter x'1 x'2 x'3)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 14 x'1
+             P'.wirePutRep 21 2 x'2
+             P'.wirePutOpt 24 8 x'3
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{operation = Prelude'.Just new'Field}) (P'.wireGet 14)
+             21 -> Prelude'.fmap (\ !new'Field -> old'Self{coeff = P'.append (coeff old'Self) new'Field}) (P'.wireGet 2)
+             18 -> Prelude'.fmap (\ !new'Field -> old'Self{coeff = P'.mergeAppend (coeff old'Self) new'Field}) (P'.wireGetPacked 2)
+             24 -> Prelude'.fmap (\ !new'Field -> old'Self{stable_prod_grad = Prelude'.Just new'Field}) (P'.wireGet 8)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> EltwiseParameter) EltwiseParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB EltwiseParameter
+ 
+instance P'.ReflectDescriptor EltwiseParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 18, 21, 24])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.EltwiseParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"EltwiseParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"EltwiseParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.EltwiseParameter.operation\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"EltwiseParameter\"], baseName' = FName \"operation\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.EltwiseParameter.EltwiseOp\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"EltwiseParameter\"], baseName = MName \"EltwiseOp\"}), hsRawDefault = Just \"SUM\", hsDefault = Just (HsDef'Enum \"SUM\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.EltwiseParameter.coeff\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"EltwiseParameter\"], baseName' = FName \"coeff\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Just (WireTag {getWireTag = 21},WireTag {getWireTag = 18}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.EltwiseParameter.stable_prod_grad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"EltwiseParameter\"], baseName' = FName \"stable_prod_grad\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/EltwiseParameter/EltwiseOp.hs b/Gen/Caffe/EltwiseParameter/EltwiseOp.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/EltwiseParameter/EltwiseOp.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.EltwiseParameter.EltwiseOp  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data EltwiseOp = PROD
+               | SUM
+               | MAX
+               deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''EltwiseOp
+
+ 
+instance P'.Mergeable EltwiseOp
+ 
+instance Prelude'.Bounded EltwiseOp where
+  minBound = PROD
+  maxBound = MAX
+ 
+instance P'.Default EltwiseOp where
+  defaultValue = PROD
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe EltwiseOp
+toMaybe'Enum 0 = Prelude'.Just PROD
+toMaybe'Enum 1 = Prelude'.Just SUM
+toMaybe'Enum 2 = Prelude'.Just MAX
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum EltwiseOp where
+  fromEnum PROD = 0
+  fromEnum SUM = 1
+  fromEnum MAX = 2
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.EltwiseParameter.EltwiseOp") .
+      toMaybe'Enum
+  succ PROD = SUM
+  succ SUM = MAX
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.EltwiseParameter.EltwiseOp"
+  pred SUM = PROD
+  pred MAX = SUM
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.EltwiseParameter.EltwiseOp"
+ 
+instance P'.Wire EltwiseOp where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB EltwiseOp
+ 
+instance P'.MessageAPI msg' (msg' -> EltwiseOp) EltwiseOp where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum EltwiseOp where
+  reflectEnum = [(0, "PROD", PROD), (1, "SUM", SUM), (2, "MAX", MAX)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.EltwiseParameter.EltwiseOp") ["Gen"] ["Caffe", "EltwiseParameter"] "EltwiseOp")
+      ["Gen", "Caffe", "EltwiseParameter", "EltwiseOp.hs"]
+      [(0, "PROD"), (1, "SUM"), (2, "MAX")]
diff --git a/Gen/Caffe/ExpParameter.hs b/Gen/Caffe/ExpParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ExpParameter.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ExpParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data ExpParameter = ExpParameter{base :: !(P'.Maybe P'.Float), scale :: !(P'.Maybe P'.Float), shift :: !(P'.Maybe P'.Float)}
+                  deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''ExpParameter
+
+ 
+instance P'.Mergeable ExpParameter where
+  mergeAppend (ExpParameter x'1 x'2 x'3) (ExpParameter y'1 y'2 y'3)
+   = ExpParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3)
+ 
+instance P'.Default ExpParameter where
+  defaultValue = ExpParameter (Prelude'.Just (-1.0)) (Prelude'.Just 1.0) (Prelude'.Just 0.0)
+ 
+instance P'.Wire ExpParameter where
+  wireSize ft' self'@(ExpParameter x'1 x'2 x'3)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 2 x'1 + P'.wireSizeOpt 1 2 x'2 + P'.wireSizeOpt 1 2 x'3)
+  wirePut ft' self'@(ExpParameter x'1 x'2 x'3)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 13 2 x'1
+             P'.wirePutOpt 21 2 x'2
+             P'.wirePutOpt 29 2 x'3
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             13 -> Prelude'.fmap (\ !new'Field -> old'Self{base = Prelude'.Just new'Field}) (P'.wireGet 2)
+             21 -> Prelude'.fmap (\ !new'Field -> old'Self{scale = Prelude'.Just new'Field}) (P'.wireGet 2)
+             29 -> Prelude'.fmap (\ !new'Field -> old'Self{shift = Prelude'.Just new'Field}) (P'.wireGet 2)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> ExpParameter) ExpParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB ExpParameter
+ 
+instance P'.ReflectDescriptor ExpParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [13, 21, 29])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ExpParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ExpParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ExpParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ExpParameter.base\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ExpParameter\"], baseName' = FName \"base\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"-1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational ((-1) % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ExpParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ExpParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ExpParameter.shift\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ExpParameter\"], baseName' = FName \"shift\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 29}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/FillerParameter.hs b/Gen/Caffe/FillerParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/FillerParameter.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.FillerParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data FillerParameter = FillerParameter{type' :: !(P'.Maybe P'.Utf8), value :: !(P'.Maybe P'.Float), min :: !(P'.Maybe P'.Float),
+                                       max :: !(P'.Maybe P'.Float), mean :: !(P'.Maybe P'.Float), std :: !(P'.Maybe P'.Float),
+                                       sparse :: !(P'.Maybe P'.Int32)}
+                     deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''FillerParameter
+
+ 
+instance P'.Mergeable FillerParameter where
+  mergeAppend (FillerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7) (FillerParameter y'1 y'2 y'3 y'4 y'5 y'6 y'7)
+   = FillerParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+ 
+instance P'.Default FillerParameter where
+  defaultValue
+   = FillerParameter (Prelude'.Just (P'.Utf8 (P'.pack "constant"))) (Prelude'.Just 0.0) (Prelude'.Just 0.0) (Prelude'.Just 1.0)
+      (Prelude'.Just 0.0)
+      (Prelude'.Just 1.0)
+      (Prelude'.Just (-1))
+ 
+instance P'.Wire FillerParameter where
+  wireSize ft' self'@(FillerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 9 x'1 + P'.wireSizeOpt 1 2 x'2 + P'.wireSizeOpt 1 2 x'3 + P'.wireSizeOpt 1 2 x'4 +
+             P'.wireSizeOpt 1 2 x'5
+             + P'.wireSizeOpt 1 2 x'6
+             + P'.wireSizeOpt 1 5 x'7)
+  wirePut ft' self'@(FillerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'1
+             P'.wirePutOpt 21 2 x'2
+             P'.wirePutOpt 29 2 x'3
+             P'.wirePutOpt 37 2 x'4
+             P'.wirePutOpt 45 2 x'5
+             P'.wirePutOpt 53 2 x'6
+             P'.wirePutOpt 56 5 x'7
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{type' = Prelude'.Just new'Field}) (P'.wireGet 9)
+             21 -> Prelude'.fmap (\ !new'Field -> old'Self{value = Prelude'.Just new'Field}) (P'.wireGet 2)
+             29 -> Prelude'.fmap (\ !new'Field -> old'Self{min = Prelude'.Just new'Field}) (P'.wireGet 2)
+             37 -> Prelude'.fmap (\ !new'Field -> old'Self{max = Prelude'.Just new'Field}) (P'.wireGet 2)
+             45 -> Prelude'.fmap (\ !new'Field -> old'Self{mean = Prelude'.Just new'Field}) (P'.wireGet 2)
+             53 -> Prelude'.fmap (\ !new'Field -> old'Self{std = Prelude'.Just new'Field}) (P'.wireGet 2)
+             56 -> Prelude'.fmap (\ !new'Field -> old'Self{sparse = Prelude'.Just new'Field}) (P'.wireGet 5)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> FillerParameter) FillerParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB FillerParameter
+ 
+instance P'.ReflectDescriptor FillerParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [10, 21, 29, 37, 45, 53, 56])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"FillerParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"type'\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"constant\", hsDefault = Just (HsDef'ByteString \"constant\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.value\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"value\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.min\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"min\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 29}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.max\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"max\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 37}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.mean\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"mean\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 45}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.std\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"std\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 53}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.FillerParameter.sparse\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"FillerParameter\"], baseName' = FName \"sparse\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"-1\", hsDefault = Just (HsDef'Integer (-1))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/HDF5DataParameter.hs b/Gen/Caffe/HDF5DataParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/HDF5DataParameter.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.HDF5DataParameter (HDF5DataParameter(..)) where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+data HDF5DataParameter = HDF5DataParameter{source :: !(P'.Maybe P'.Utf8), batch_size :: !(P'.Maybe P'.Word32)}
+                       deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+ 
+instance P'.Mergeable HDF5DataParameter where
+  mergeAppend (HDF5DataParameter x'1 x'2) (HDF5DataParameter y'1 y'2)
+   = HDF5DataParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)
+ 
+instance P'.Default HDF5DataParameter where
+  defaultValue = HDF5DataParameter P'.defaultValue P'.defaultValue
+ 
+instance P'.Wire HDF5DataParameter where
+  wireSize ft' self'@(HDF5DataParameter x'1 x'2)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 9 x'1 + P'.wireSizeOpt 1 13 x'2)
+  wirePut ft' self'@(HDF5DataParameter x'1 x'2)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'1
+             P'.wirePutOpt 16 13 x'2
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{source = Prelude'.Just new'Field}) (P'.wireGet 9)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{batch_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> HDF5DataParameter) HDF5DataParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB HDF5DataParameter
+ 
+instance P'.ReflectDescriptor HDF5DataParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [10, 16])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.HDF5DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5DataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"HDF5DataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.HDF5DataParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"HDF5DataParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.HDF5DataParameter.batch_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"HDF5DataParameter\"], baseName' = FName \"batch_size\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/HDF5OutputParameter.hs b/Gen/Caffe/HDF5OutputParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/HDF5OutputParameter.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.HDF5OutputParameter (HDF5OutputParameter(..)) where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+data HDF5OutputParameter = HDF5OutputParameter{file_name :: !(P'.Maybe P'.Utf8)}
+                         deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+ 
+instance P'.Mergeable HDF5OutputParameter where
+  mergeAppend (HDF5OutputParameter x'1) (HDF5OutputParameter y'1) = HDF5OutputParameter (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default HDF5OutputParameter where
+  defaultValue = HDF5OutputParameter P'.defaultValue
+ 
+instance P'.Wire HDF5OutputParameter where
+  wireSize ft' self'@(HDF5OutputParameter x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 9 x'1)
+  wirePut ft' self'@(HDF5OutputParameter x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{file_name = Prelude'.Just new'Field}) (P'.wireGet 9)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> HDF5OutputParameter) HDF5OutputParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB HDF5OutputParameter
+ 
+instance P'.ReflectDescriptor HDF5OutputParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [10])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.HDF5OutputParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5OutputParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"HDF5OutputParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.HDF5OutputParameter.file_name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"HDF5OutputParameter\"], baseName' = FName \"file_name\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/HingeLossParameter.hs b/Gen/Caffe/HingeLossParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/HingeLossParameter.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.HingeLossParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.HingeLossParameter.Norm as Caffe.HingeLossParameter (Norm)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data HingeLossParameter = HingeLossParameter{norm :: !(P'.Maybe Caffe.HingeLossParameter.Norm)}
+                        deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''HingeLossParameter
+
+ 
+instance P'.Mergeable HingeLossParameter where
+  mergeAppend (HingeLossParameter x'1) (HingeLossParameter y'1) = HingeLossParameter (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default HingeLossParameter where
+  defaultValue = HingeLossParameter (Prelude'.Just (Prelude'.read "L1"))
+ 
+instance P'.Wire HingeLossParameter where
+  wireSize ft' self'@(HingeLossParameter x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 14 x'1)
+  wirePut ft' self'@(HingeLossParameter x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 14 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{norm = Prelude'.Just new'Field}) (P'.wireGet 14)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> HingeLossParameter) HingeLossParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB HingeLossParameter
+ 
+instance P'.ReflectDescriptor HingeLossParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.HingeLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HingeLossParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"HingeLossParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.HingeLossParameter.norm\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"HingeLossParameter\"], baseName' = FName \"norm\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HingeLossParameter.Norm\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"HingeLossParameter\"], baseName = MName \"Norm\"}), hsRawDefault = Just \"L1\", hsDefault = Just (HsDef'Enum \"L1\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/HingeLossParameter/Norm.hs b/Gen/Caffe/HingeLossParameter/Norm.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/HingeLossParameter/Norm.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.HingeLossParameter.Norm  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data Norm = L1
+          | L2
+          deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''Norm
+
+ 
+instance P'.Mergeable Norm
+ 
+instance Prelude'.Bounded Norm where
+  minBound = L1
+  maxBound = L2
+ 
+instance P'.Default Norm where
+  defaultValue = L1
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe Norm
+toMaybe'Enum 1 = Prelude'.Just L1
+toMaybe'Enum 2 = Prelude'.Just L2
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum Norm where
+  fromEnum L1 = 1
+  fromEnum L2 = 2
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.HingeLossParameter.Norm") .
+      toMaybe'Enum
+  succ L1 = L2
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.HingeLossParameter.Norm"
+  pred L2 = L1
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.HingeLossParameter.Norm"
+ 
+instance P'.Wire Norm where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB Norm
+ 
+instance P'.MessageAPI msg' (msg' -> Norm) Norm where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum Norm where
+  reflectEnum = [(1, "L1", L1), (2, "L2", L2)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.HingeLossParameter.Norm") ["Gen"] ["Caffe", "HingeLossParameter"] "Norm")
+      ["Gen", "Caffe", "HingeLossParameter", "Norm.hs"]
+      [(1, "L1"), (2, "L2")]
diff --git a/Gen/Caffe/ImageDataParameter.hs b/Gen/Caffe/ImageDataParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ImageDataParameter.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ImageDataParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data ImageDataParameter = ImageDataParameter{source :: !(P'.Maybe P'.Utf8), batch_size :: !(P'.Maybe P'.Word32),
+                                             rand_skip :: !(P'.Maybe P'.Word32), shuffle :: !(P'.Maybe P'.Bool),
+                                             new_height :: !(P'.Maybe P'.Word32), new_width :: !(P'.Maybe P'.Word32),
+                                             is_color :: !(P'.Maybe P'.Bool), scale :: !(P'.Maybe P'.Float),
+                                             mean_file :: !(P'.Maybe P'.Utf8), crop_size :: !(P'.Maybe P'.Word32),
+                                             mirror :: !(P'.Maybe P'.Bool), root_folder :: !(P'.Maybe P'.Utf8)}
+                        deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''ImageDataParameter
+
+ 
+instance P'.Mergeable ImageDataParameter where
+  mergeAppend (ImageDataParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12)
+   (ImageDataParameter y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9 y'10 y'11 y'12)
+   = ImageDataParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+      (P'.mergeAppend x'8 y'8)
+      (P'.mergeAppend x'9 y'9)
+      (P'.mergeAppend x'10 y'10)
+      (P'.mergeAppend x'11 y'11)
+      (P'.mergeAppend x'12 y'12)
+ 
+instance P'.Default ImageDataParameter where
+  defaultValue
+   = ImageDataParameter P'.defaultValue P'.defaultValue (Prelude'.Just 0) (Prelude'.Just Prelude'.False) (Prelude'.Just 0)
+      (Prelude'.Just 0)
+      (Prelude'.Just Prelude'.True)
+      (Prelude'.Just 1.0)
+      P'.defaultValue
+      (Prelude'.Just 0)
+      (Prelude'.Just Prelude'.False)
+      (Prelude'.Just (P'.Utf8 (P'.pack "")))
+ 
+instance P'.Wire ImageDataParameter where
+  wireSize ft' self'@(ImageDataParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 9 x'1 + P'.wireSizeOpt 1 13 x'2 + P'.wireSizeOpt 1 13 x'3 + P'.wireSizeOpt 1 8 x'4 +
+             P'.wireSizeOpt 1 13 x'5
+             + P'.wireSizeOpt 1 13 x'6
+             + P'.wireSizeOpt 1 8 x'7
+             + P'.wireSizeOpt 1 2 x'8
+             + P'.wireSizeOpt 1 9 x'9
+             + P'.wireSizeOpt 1 13 x'10
+             + P'.wireSizeOpt 1 8 x'11
+             + P'.wireSizeOpt 1 9 x'12)
+  wirePut ft' self'@(ImageDataParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'1
+             P'.wirePutOpt 21 2 x'8
+             P'.wirePutOpt 26 9 x'9
+             P'.wirePutOpt 32 13 x'2
+             P'.wirePutOpt 40 13 x'10
+             P'.wirePutOpt 48 8 x'11
+             P'.wirePutOpt 56 13 x'3
+             P'.wirePutOpt 64 8 x'4
+             P'.wirePutOpt 72 13 x'5
+             P'.wirePutOpt 80 13 x'6
+             P'.wirePutOpt 88 8 x'7
+             P'.wirePutOpt 98 9 x'12
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{source = Prelude'.Just new'Field}) (P'.wireGet 9)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{batch_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             56 -> Prelude'.fmap (\ !new'Field -> old'Self{rand_skip = Prelude'.Just new'Field}) (P'.wireGet 13)
+             64 -> Prelude'.fmap (\ !new'Field -> old'Self{shuffle = Prelude'.Just new'Field}) (P'.wireGet 8)
+             72 -> Prelude'.fmap (\ !new'Field -> old'Self{new_height = Prelude'.Just new'Field}) (P'.wireGet 13)
+             80 -> Prelude'.fmap (\ !new'Field -> old'Self{new_width = Prelude'.Just new'Field}) (P'.wireGet 13)
+             88 -> Prelude'.fmap (\ !new'Field -> old'Self{is_color = Prelude'.Just new'Field}) (P'.wireGet 8)
+             21 -> Prelude'.fmap (\ !new'Field -> old'Self{scale = Prelude'.Just new'Field}) (P'.wireGet 2)
+             26 -> Prelude'.fmap (\ !new'Field -> old'Self{mean_file = Prelude'.Just new'Field}) (P'.wireGet 9)
+             40 -> Prelude'.fmap (\ !new'Field -> old'Self{crop_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             48 -> Prelude'.fmap (\ !new'Field -> old'Self{mirror = Prelude'.Just new'Field}) (P'.wireGet 8)
+             98 -> Prelude'.fmap (\ !new'Field -> old'Self{root_folder = Prelude'.Just new'Field}) (P'.wireGet 9)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> ImageDataParameter) ImageDataParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB ImageDataParameter
+ 
+instance P'.ReflectDescriptor ImageDataParameter where
+  getMessageInfo _
+   = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [10, 21, 26, 32, 40, 48, 56, 64, 72, 80, 88, 98])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ImageDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ImageDataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ImageDataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.batch_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"batch_size\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.rand_skip\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"rand_skip\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.shuffle\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"shuffle\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.new_height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"new_height\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 72}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.new_width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"new_width\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 80}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.is_color\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"is_color\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.mean_file\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"mean_file\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.crop_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"crop_size\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.mirror\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"mirror\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ImageDataParameter.root_folder\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ImageDataParameter\"], baseName' = FName \"root_folder\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 98}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"\", hsDefault = Just (HsDef'ByteString \"\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/InfogainLossParameter.hs b/Gen/Caffe/InfogainLossParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/InfogainLossParameter.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.InfogainLossParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data InfogainLossParameter = InfogainLossParameter{source :: !(P'.Maybe P'.Utf8)}
+                           deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''InfogainLossParameter
+
+ 
+instance P'.Mergeable InfogainLossParameter where
+  mergeAppend (InfogainLossParameter x'1) (InfogainLossParameter y'1) = InfogainLossParameter (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default InfogainLossParameter where
+  defaultValue = InfogainLossParameter P'.defaultValue
+ 
+instance P'.Wire InfogainLossParameter where
+  wireSize ft' self'@(InfogainLossParameter x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 9 x'1)
+  wirePut ft' self'@(InfogainLossParameter x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{source = Prelude'.Just new'Field}) (P'.wireGet 9)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> InfogainLossParameter) InfogainLossParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB InfogainLossParameter
+ 
+instance P'.ReflectDescriptor InfogainLossParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [10])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.InfogainLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InfogainLossParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"InfogainLossParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.InfogainLossParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"InfogainLossParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/InnerProductParameter.hs b/Gen/Caffe/InnerProductParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/InnerProductParameter.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.InnerProductParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.FillerParameter as Caffe (FillerParameter)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data InnerProductParameter = InnerProductParameter{num_output :: !(P'.Maybe P'.Word32), bias_term :: !(P'.Maybe P'.Bool),
+                                                   weight_filler :: !(P'.Maybe Caffe.FillerParameter),
+                                                   bias_filler :: !(P'.Maybe Caffe.FillerParameter)}
+                           deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''InnerProductParameter
+
+ 
+instance P'.Mergeable InnerProductParameter where
+  mergeAppend (InnerProductParameter x'1 x'2 x'3 x'4) (InnerProductParameter y'1 y'2 y'3 y'4)
+   = InnerProductParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+ 
+instance P'.Default InnerProductParameter where
+  defaultValue = InnerProductParameter P'.defaultValue (Prelude'.Just Prelude'.True) P'.defaultValue P'.defaultValue
+ 
+instance P'.Wire InnerProductParameter where
+  wireSize ft' self'@(InnerProductParameter x'1 x'2 x'3 x'4)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 13 x'1 + P'.wireSizeOpt 1 8 x'2 + P'.wireSizeOpt 1 11 x'3 + P'.wireSizeOpt 1 11 x'4)
+  wirePut ft' self'@(InnerProductParameter x'1 x'2 x'3 x'4)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 13 x'1
+             P'.wirePutOpt 16 8 x'2
+             P'.wirePutOpt 26 11 x'3
+             P'.wirePutOpt 34 11 x'4
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{num_output = Prelude'.Just new'Field}) (P'.wireGet 13)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{bias_term = Prelude'.Just new'Field}) (P'.wireGet 8)
+             26 -> Prelude'.fmap
+                    (\ !new'Field -> old'Self{weight_filler = P'.mergeAppend (weight_filler old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             34 -> Prelude'.fmap
+                    (\ !new'Field -> old'Self{bias_filler = P'.mergeAppend (bias_filler old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> InnerProductParameter) InnerProductParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB InnerProductParameter
+ 
+instance P'.ReflectDescriptor InnerProductParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 16, 26, 34])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.InnerProductParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InnerProductParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"InnerProductParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.InnerProductParameter.num_output\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"InnerProductParameter\"], baseName' = FName \"num_output\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.InnerProductParameter.bias_term\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"InnerProductParameter\"], baseName' = FName \"bias_term\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.InnerProductParameter.weight_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"InnerProductParameter\"], baseName' = FName \"weight_filler\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.InnerProductParameter.bias_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"InnerProductParameter\"], baseName' = FName \"bias_filler\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/LRNParameter.hs b/Gen/Caffe/LRNParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/LRNParameter.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.LRNParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.LRNParameter.NormRegion as Caffe.LRNParameter (NormRegion)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data LRNParameter = LRNParameter{local_size :: !(P'.Maybe P'.Word32), alpha :: !(P'.Maybe P'.Float), beta :: !(P'.Maybe P'.Float),
+                                 norm_region :: !(P'.Maybe Caffe.LRNParameter.NormRegion), k :: !(P'.Maybe P'.Float)}
+                  deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''LRNParameter
+
+ 
+instance P'.Mergeable LRNParameter where
+  mergeAppend (LRNParameter x'1 x'2 x'3 x'4 x'5) (LRNParameter y'1 y'2 y'3 y'4 y'5)
+   = LRNParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+ 
+instance P'.Default LRNParameter where
+  defaultValue
+   = LRNParameter (Prelude'.Just 5) (Prelude'.Just 1.0) (Prelude'.Just 0.75) (Prelude'.Just (Prelude'.read "ACROSS_CHANNELS"))
+      (Prelude'.Just 1.0)
+ 
+instance P'.Wire LRNParameter where
+  wireSize ft' self'@(LRNParameter x'1 x'2 x'3 x'4 x'5)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 13 x'1 + P'.wireSizeOpt 1 2 x'2 + P'.wireSizeOpt 1 2 x'3 + P'.wireSizeOpt 1 14 x'4 +
+             P'.wireSizeOpt 1 2 x'5)
+  wirePut ft' self'@(LRNParameter x'1 x'2 x'3 x'4 x'5)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 13 x'1
+             P'.wirePutOpt 21 2 x'2
+             P'.wirePutOpt 29 2 x'3
+             P'.wirePutOpt 32 14 x'4
+             P'.wirePutOpt 45 2 x'5
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{local_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             21 -> Prelude'.fmap (\ !new'Field -> old'Self{alpha = Prelude'.Just new'Field}) (P'.wireGet 2)
+             29 -> Prelude'.fmap (\ !new'Field -> old'Self{beta = Prelude'.Just new'Field}) (P'.wireGet 2)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{norm_region = Prelude'.Just new'Field}) (P'.wireGet 14)
+             45 -> Prelude'.fmap (\ !new'Field -> old'Self{k = Prelude'.Just new'Field}) (P'.wireGet 2)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> LRNParameter) LRNParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB LRNParameter
+ 
+instance P'.ReflectDescriptor LRNParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 21, 29, 32, 45])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.LRNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LRNParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"LRNParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LRNParameter.local_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LRNParameter\"], baseName' = FName \"local_size\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"5\", hsDefault = Just (HsDef'Integer 5)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LRNParameter.alpha\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LRNParameter\"], baseName' = FName \"alpha\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LRNParameter.beta\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LRNParameter\"], baseName' = FName \"beta\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 29}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.75\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (3 % 4)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LRNParameter.norm_region\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LRNParameter\"], baseName' = FName \"norm_region\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LRNParameter.NormRegion\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"LRNParameter\"], baseName = MName \"NormRegion\"}), hsRawDefault = Just \"ACROSS_CHANNELS\", hsDefault = Just (HsDef'Enum \"ACROSS_CHANNELS\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LRNParameter.k\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LRNParameter\"], baseName' = FName \"k\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 45}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/LRNParameter/NormRegion.hs b/Gen/Caffe/LRNParameter/NormRegion.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/LRNParameter/NormRegion.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.LRNParameter.NormRegion  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data NormRegion = ACROSS_CHANNELS
+                | WITHIN_CHANNEL
+                deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''NormRegion
+
+ 
+instance P'.Mergeable NormRegion
+ 
+instance Prelude'.Bounded NormRegion where
+  minBound = ACROSS_CHANNELS
+  maxBound = WITHIN_CHANNEL
+ 
+instance P'.Default NormRegion where
+  defaultValue = ACROSS_CHANNELS
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe NormRegion
+toMaybe'Enum 0 = Prelude'.Just ACROSS_CHANNELS
+toMaybe'Enum 1 = Prelude'.Just WITHIN_CHANNEL
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum NormRegion where
+  fromEnum ACROSS_CHANNELS = 0
+  fromEnum WITHIN_CHANNEL = 1
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.LRNParameter.NormRegion") .
+      toMaybe'Enum
+  succ ACROSS_CHANNELS = WITHIN_CHANNEL
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.LRNParameter.NormRegion"
+  pred WITHIN_CHANNEL = ACROSS_CHANNELS
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.LRNParameter.NormRegion"
+ 
+instance P'.Wire NormRegion where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB NormRegion
+ 
+instance P'.MessageAPI msg' (msg' -> NormRegion) NormRegion where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum NormRegion where
+  reflectEnum = [(0, "ACROSS_CHANNELS", ACROSS_CHANNELS), (1, "WITHIN_CHANNEL", WITHIN_CHANNEL)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.LRNParameter.NormRegion") ["Gen"] ["Caffe", "LRNParameter"] "NormRegion")
+      ["Gen", "Caffe", "LRNParameter", "NormRegion.hs"]
+      [(0, "ACROSS_CHANNELS"), (1, "WITHIN_CHANNEL")]
diff --git a/Gen/Caffe/LayerParameter.hs b/Gen/Caffe/LayerParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/LayerParameter.hs
@@ -0,0 +1,396 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.LayerParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.AccuracyParameter as Caffe (AccuracyParameter)
+import qualified Gen.Caffe.ArgMaxParameter as Caffe (ArgMaxParameter)
+import qualified Gen.Caffe.BlobProto as Caffe (BlobProto)
+import qualified Gen.Caffe.ConcatParameter as Caffe (ConcatParameter)
+import qualified Gen.Caffe.ContrastiveLossParameter as Caffe (ContrastiveLossParameter)
+import qualified Gen.Caffe.ConvolutionParameter as Caffe (ConvolutionParameter)
+import qualified Gen.Caffe.DataParameter as Caffe (DataParameter)
+import qualified Gen.Caffe.DropoutParameter as Caffe (DropoutParameter)
+import qualified Gen.Caffe.DummyDataParameter as Caffe (DummyDataParameter)
+import qualified Gen.Caffe.EltwiseParameter as Caffe (EltwiseParameter)
+import qualified Gen.Caffe.ExpParameter as Caffe (ExpParameter)
+import qualified Gen.Caffe.HDF5DataParameter as Caffe (HDF5DataParameter)
+import qualified Gen.Caffe.HDF5OutputParameter as Caffe (HDF5OutputParameter)
+import qualified Gen.Caffe.HingeLossParameter as Caffe (HingeLossParameter)
+import qualified Gen.Caffe.ImageDataParameter as Caffe (ImageDataParameter)
+import qualified Gen.Caffe.InfogainLossParameter as Caffe (InfogainLossParameter)
+import qualified Gen.Caffe.InnerProductParameter as Caffe (InnerProductParameter)
+import qualified Gen.Caffe.LRNParameter as Caffe (LRNParameter)
+import qualified Gen.Caffe.LossParameter as Caffe (LossParameter)
+import qualified Gen.Caffe.MVNParameter as Caffe (MVNParameter)
+import qualified Gen.Caffe.MemoryDataParameter as Caffe (MemoryDataParameter)
+import qualified Gen.Caffe.NetStateRule as Caffe (NetStateRule)
+import qualified Gen.Caffe.ParamSpec as Caffe (ParamSpec)
+import qualified Gen.Caffe.PoolingParameter as Caffe (PoolingParameter)
+import qualified Gen.Caffe.PowerParameter as Caffe (PowerParameter)
+import qualified Gen.Caffe.ReLUParameter as Caffe (ReLUParameter)
+import qualified Gen.Caffe.SigmoidParameter as Caffe (SigmoidParameter)
+import qualified Gen.Caffe.SliceParameter as Caffe (SliceParameter)
+import qualified Gen.Caffe.SoftmaxParameter as Caffe (SoftmaxParameter)
+import qualified Gen.Caffe.TanHParameter as Caffe (TanHParameter)
+import qualified Gen.Caffe.ThresholdParameter as Caffe (ThresholdParameter)
+import qualified Gen.Caffe.TransformationParameter as Caffe (TransformationParameter)
+import qualified Gen.Caffe.WindowDataParameter as Caffe (WindowDataParameter)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data LayerParameter = LayerParameter{name :: !(P'.Maybe P'.Utf8), type' :: !(P'.Maybe P'.Utf8), bottom :: !(P'.Seq P'.Utf8),
+                                     top :: !(P'.Seq P'.Utf8), loss_weight :: !(P'.Seq P'.Float),
+                                     param :: !(P'.Seq Caffe.ParamSpec), blobs :: !(P'.Seq Caffe.BlobProto),
+                                     include :: !(P'.Seq Caffe.NetStateRule), exclude :: !(P'.Seq Caffe.NetStateRule),
+                                     transform_param :: !(P'.Maybe Caffe.TransformationParameter),
+                                     loss_param :: !(P'.Maybe Caffe.LossParameter),
+                                     accuracy_param :: !(P'.Maybe Caffe.AccuracyParameter),
+                                     argmax_param :: !(P'.Maybe Caffe.ArgMaxParameter),
+                                     concat_param :: !(P'.Maybe Caffe.ConcatParameter),
+                                     contrastive_loss_param :: !(P'.Maybe Caffe.ContrastiveLossParameter),
+                                     convolution_param :: !(P'.Maybe Caffe.ConvolutionParameter),
+                                     data_param :: !(P'.Maybe Caffe.DataParameter),
+                                     dropout_param :: !(P'.Maybe Caffe.DropoutParameter),
+                                     dummy_data_param :: !(P'.Maybe Caffe.DummyDataParameter),
+                                     eltwise_param :: !(P'.Maybe Caffe.EltwiseParameter),
+                                     exp_param :: !(P'.Maybe Caffe.ExpParameter),
+                                     hdf5_data_param :: !(P'.Maybe Caffe.HDF5DataParameter),
+                                     hdf5_output_param :: !(P'.Maybe Caffe.HDF5OutputParameter),
+                                     hinge_loss_param :: !(P'.Maybe Caffe.HingeLossParameter),
+                                     image_data_param :: !(P'.Maybe Caffe.ImageDataParameter),
+                                     infogain_loss_param :: !(P'.Maybe Caffe.InfogainLossParameter),
+                                     inner_product_param :: !(P'.Maybe Caffe.InnerProductParameter),
+                                     lrn_param :: !(P'.Maybe Caffe.LRNParameter),
+                                     memory_data_param :: !(P'.Maybe Caffe.MemoryDataParameter),
+                                     mvn_param :: !(P'.Maybe Caffe.MVNParameter),
+                                     pooling_param :: !(P'.Maybe Caffe.PoolingParameter),
+                                     power_param :: !(P'.Maybe Caffe.PowerParameter), relu_param :: !(P'.Maybe Caffe.ReLUParameter),
+                                     sigmoid_param :: !(P'.Maybe Caffe.SigmoidParameter),
+                                     softmax_param :: !(P'.Maybe Caffe.SoftmaxParameter),
+                                     slice_param :: !(P'.Maybe Caffe.SliceParameter), tanh_param :: !(P'.Maybe Caffe.TanHParameter),
+                                     threshold_param :: !(P'.Maybe Caffe.ThresholdParameter),
+                                     window_data_param :: !(P'.Maybe Caffe.WindowDataParameter)}
+                    deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''LayerParameter
+
+ 
+instance P'.Mergeable LayerParameter where
+  mergeAppend
+   (LayerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23 x'24
+     x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34 x'35 x'36 x'37 x'38 x'39)
+   (LayerParameter y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9 y'10 y'11 y'12 y'13 y'14 y'15 y'16 y'17 y'18 y'19 y'20 y'21 y'22 y'23 y'24
+     y'25 y'26 y'27 y'28 y'29 y'30 y'31 y'32 y'33 y'34 y'35 y'36 y'37 y'38 y'39)
+   = LayerParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+      (P'.mergeAppend x'8 y'8)
+      (P'.mergeAppend x'9 y'9)
+      (P'.mergeAppend x'10 y'10)
+      (P'.mergeAppend x'11 y'11)
+      (P'.mergeAppend x'12 y'12)
+      (P'.mergeAppend x'13 y'13)
+      (P'.mergeAppend x'14 y'14)
+      (P'.mergeAppend x'15 y'15)
+      (P'.mergeAppend x'16 y'16)
+      (P'.mergeAppend x'17 y'17)
+      (P'.mergeAppend x'18 y'18)
+      (P'.mergeAppend x'19 y'19)
+      (P'.mergeAppend x'20 y'20)
+      (P'.mergeAppend x'21 y'21)
+      (P'.mergeAppend x'22 y'22)
+      (P'.mergeAppend x'23 y'23)
+      (P'.mergeAppend x'24 y'24)
+      (P'.mergeAppend x'25 y'25)
+      (P'.mergeAppend x'26 y'26)
+      (P'.mergeAppend x'27 y'27)
+      (P'.mergeAppend x'28 y'28)
+      (P'.mergeAppend x'29 y'29)
+      (P'.mergeAppend x'30 y'30)
+      (P'.mergeAppend x'31 y'31)
+      (P'.mergeAppend x'32 y'32)
+      (P'.mergeAppend x'33 y'33)
+      (P'.mergeAppend x'34 y'34)
+      (P'.mergeAppend x'35 y'35)
+      (P'.mergeAppend x'36 y'36)
+      (P'.mergeAppend x'37 y'37)
+      (P'.mergeAppend x'38 y'38)
+      (P'.mergeAppend x'39 y'39)
+ 
+instance P'.Default LayerParameter where
+  defaultValue
+   = LayerParameter P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+ 
+instance P'.Wire LayerParameter where
+  wireSize ft'
+   self'@(LayerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23
+           x'24 x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34 x'35 x'36 x'37 x'38 x'39)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 9 x'1 + P'.wireSizeOpt 1 9 x'2 + P'.wireSizeRep 1 9 x'3 + P'.wireSizeRep 1 9 x'4 +
+             P'.wireSizeRep 1 2 x'5
+             + P'.wireSizeRep 1 11 x'6
+             + P'.wireSizeRep 1 11 x'7
+             + P'.wireSizeRep 1 11 x'8
+             + P'.wireSizeRep 1 11 x'9
+             + P'.wireSizeOpt 2 11 x'10
+             + P'.wireSizeOpt 2 11 x'11
+             + P'.wireSizeOpt 2 11 x'12
+             + P'.wireSizeOpt 2 11 x'13
+             + P'.wireSizeOpt 2 11 x'14
+             + P'.wireSizeOpt 2 11 x'15
+             + P'.wireSizeOpt 2 11 x'16
+             + P'.wireSizeOpt 2 11 x'17
+             + P'.wireSizeOpt 2 11 x'18
+             + P'.wireSizeOpt 2 11 x'19
+             + P'.wireSizeOpt 2 11 x'20
+             + P'.wireSizeOpt 2 11 x'21
+             + P'.wireSizeOpt 2 11 x'22
+             + P'.wireSizeOpt 2 11 x'23
+             + P'.wireSizeOpt 2 11 x'24
+             + P'.wireSizeOpt 2 11 x'25
+             + P'.wireSizeOpt 2 11 x'26
+             + P'.wireSizeOpt 2 11 x'27
+             + P'.wireSizeOpt 2 11 x'28
+             + P'.wireSizeOpt 2 11 x'29
+             + P'.wireSizeOpt 2 11 x'30
+             + P'.wireSizeOpt 2 11 x'31
+             + P'.wireSizeOpt 2 11 x'32
+             + P'.wireSizeOpt 2 11 x'33
+             + P'.wireSizeOpt 2 11 x'34
+             + P'.wireSizeOpt 2 11 x'35
+             + P'.wireSizeOpt 2 11 x'36
+             + P'.wireSizeOpt 2 11 x'37
+             + P'.wireSizeOpt 2 11 x'38
+             + P'.wireSizeOpt 2 11 x'39)
+  wirePut ft'
+   self'@(LayerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23
+           x'24 x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34 x'35 x'36 x'37 x'38 x'39)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'1
+             P'.wirePutOpt 18 9 x'2
+             P'.wirePutRep 26 9 x'3
+             P'.wirePutRep 34 9 x'4
+             P'.wirePutRep 45 2 x'5
+             P'.wirePutRep 50 11 x'6
+             P'.wirePutRep 58 11 x'7
+             P'.wirePutRep 66 11 x'8
+             P'.wirePutRep 74 11 x'9
+             P'.wirePutOpt 802 11 x'10
+             P'.wirePutOpt 810 11 x'11
+             P'.wirePutOpt 818 11 x'12
+             P'.wirePutOpt 826 11 x'13
+             P'.wirePutOpt 834 11 x'14
+             P'.wirePutOpt 842 11 x'15
+             P'.wirePutOpt 850 11 x'16
+             P'.wirePutOpt 858 11 x'17
+             P'.wirePutOpt 866 11 x'18
+             P'.wirePutOpt 874 11 x'19
+             P'.wirePutOpt 882 11 x'20
+             P'.wirePutOpt 890 11 x'21
+             P'.wirePutOpt 898 11 x'22
+             P'.wirePutOpt 906 11 x'23
+             P'.wirePutOpt 914 11 x'24
+             P'.wirePutOpt 922 11 x'25
+             P'.wirePutOpt 930 11 x'26
+             P'.wirePutOpt 938 11 x'27
+             P'.wirePutOpt 946 11 x'28
+             P'.wirePutOpt 954 11 x'29
+             P'.wirePutOpt 962 11 x'30
+             P'.wirePutOpt 970 11 x'31
+             P'.wirePutOpt 978 11 x'32
+             P'.wirePutOpt 986 11 x'33
+             P'.wirePutOpt 994 11 x'34
+             P'.wirePutOpt 1002 11 x'35
+             P'.wirePutOpt 1010 11 x'36
+             P'.wirePutOpt 1018 11 x'37
+             P'.wirePutOpt 1026 11 x'38
+             P'.wirePutOpt 1034 11 x'39
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{name = Prelude'.Just new'Field}) (P'.wireGet 9)
+             18 -> Prelude'.fmap (\ !new'Field -> old'Self{type' = Prelude'.Just new'Field}) (P'.wireGet 9)
+             26 -> Prelude'.fmap (\ !new'Field -> old'Self{bottom = P'.append (bottom old'Self) new'Field}) (P'.wireGet 9)
+             34 -> Prelude'.fmap (\ !new'Field -> old'Self{top = P'.append (top old'Self) new'Field}) (P'.wireGet 9)
+             45 -> Prelude'.fmap (\ !new'Field -> old'Self{loss_weight = P'.append (loss_weight old'Self) new'Field}) (P'.wireGet 2)
+             42 -> Prelude'.fmap (\ !new'Field -> old'Self{loss_weight = P'.mergeAppend (loss_weight old'Self) new'Field})
+                    (P'.wireGetPacked 2)
+             50 -> Prelude'.fmap (\ !new'Field -> old'Self{param = P'.append (param old'Self) new'Field}) (P'.wireGet 11)
+             58 -> Prelude'.fmap (\ !new'Field -> old'Self{blobs = P'.append (blobs old'Self) new'Field}) (P'.wireGet 11)
+             66 -> Prelude'.fmap (\ !new'Field -> old'Self{include = P'.append (include old'Self) new'Field}) (P'.wireGet 11)
+             74 -> Prelude'.fmap (\ !new'Field -> old'Self{exclude = P'.append (exclude old'Self) new'Field}) (P'.wireGet 11)
+             802 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{transform_param = P'.mergeAppend (transform_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             810 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{loss_param = P'.mergeAppend (loss_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             818 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{accuracy_param = P'.mergeAppend (accuracy_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             826 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{argmax_param = P'.mergeAppend (argmax_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             834 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{concat_param = P'.mergeAppend (concat_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             842 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{contrastive_loss_param =
+                                 P'.mergeAppend (contrastive_loss_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             850 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{convolution_param = P'.mergeAppend (convolution_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             858 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{data_param = P'.mergeAppend (data_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             866 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{dropout_param = P'.mergeAppend (dropout_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             874 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{dummy_data_param = P'.mergeAppend (dummy_data_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             882 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{eltwise_param = P'.mergeAppend (eltwise_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             890 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{exp_param = P'.mergeAppend (exp_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             898 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{hdf5_data_param = P'.mergeAppend (hdf5_data_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             906 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{hdf5_output_param = P'.mergeAppend (hdf5_output_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             914 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{hinge_loss_param = P'.mergeAppend (hinge_loss_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             922 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{image_data_param = P'.mergeAppend (image_data_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             930 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{infogain_loss_param = P'.mergeAppend (infogain_loss_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             938 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{inner_product_param = P'.mergeAppend (inner_product_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             946 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{lrn_param = P'.mergeAppend (lrn_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             954 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{memory_data_param = P'.mergeAppend (memory_data_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             962 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{mvn_param = P'.mergeAppend (mvn_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             970 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{pooling_param = P'.mergeAppend (pooling_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             978 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{power_param = P'.mergeAppend (power_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             986 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{relu_param = P'.mergeAppend (relu_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             994 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{sigmoid_param = P'.mergeAppend (sigmoid_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             1002 -> Prelude'.fmap
+                      (\ !new'Field -> old'Self{softmax_param = P'.mergeAppend (softmax_param old'Self) (Prelude'.Just new'Field)})
+                      (P'.wireGet 11)
+             1010 -> Prelude'.fmap
+                      (\ !new'Field -> old'Self{slice_param = P'.mergeAppend (slice_param old'Self) (Prelude'.Just new'Field)})
+                      (P'.wireGet 11)
+             1018 -> Prelude'.fmap
+                      (\ !new'Field -> old'Self{tanh_param = P'.mergeAppend (tanh_param old'Self) (Prelude'.Just new'Field)})
+                      (P'.wireGet 11)
+             1026 -> Prelude'.fmap
+                      (\ !new'Field ->
+                        old'Self{threshold_param = P'.mergeAppend (threshold_param old'Self) (Prelude'.Just new'Field)})
+                      (P'.wireGet 11)
+             1034 -> Prelude'.fmap
+                      (\ !new'Field ->
+                        old'Self{window_data_param = P'.mergeAppend (window_data_param old'Self) (Prelude'.Just new'Field)})
+                      (P'.wireGet 11)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> LayerParameter) LayerParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB LayerParameter
+ 
+instance P'.ReflectDescriptor LayerParameter where
+  getMessageInfo _
+   = P'.GetMessageInfo (P'.fromDistinctAscList [])
+      (P'.fromDistinctAscList
+        [10, 18, 26, 34, 42, 45, 50, 58, 66, 74, 802, 810, 818, 826, 834, 842, 850, 858, 866, 874, 882, 890, 898, 906, 914, 922,
+         930, 938, 946, 954, 962, 970, 978, 986, 994, 1002, 1010, 1018, 1026, 1034])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LayerParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"LayerParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"name\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"type'\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.bottom\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"bottom\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.top\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"top\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.loss_weight\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"loss_weight\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 45}, packedTag = Just (WireTag {getWireTag = 45},WireTag {getWireTag = 42}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"param\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 50}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ParamSpec\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ParamSpec\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.blobs\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"blobs\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 58}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.include\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"include\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 66}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetStateRule\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetStateRule\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.exclude\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"exclude\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 74}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetStateRule\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetStateRule\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.transform_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"transform_param\"}, fieldNumber = FieldId {getFieldId = 100}, wireTag = WireTag {getWireTag = 802}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.TransformationParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TransformationParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"loss_param\"}, fieldNumber = FieldId {getFieldId = 101}, wireTag = WireTag {getWireTag = 810}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.accuracy_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"accuracy_param\"}, fieldNumber = FieldId {getFieldId = 102}, wireTag = WireTag {getWireTag = 818}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.AccuracyParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"AccuracyParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.argmax_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"argmax_param\"}, fieldNumber = FieldId {getFieldId = 103}, wireTag = WireTag {getWireTag = 826}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ArgMaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ArgMaxParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.concat_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"concat_param\"}, fieldNumber = FieldId {getFieldId = 104}, wireTag = WireTag {getWireTag = 834}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ConcatParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConcatParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.contrastive_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"contrastive_loss_param\"}, fieldNumber = FieldId {getFieldId = 105}, wireTag = WireTag {getWireTag = 842}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ContrastiveLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ContrastiveLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.convolution_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"convolution_param\"}, fieldNumber = FieldId {getFieldId = 106}, wireTag = WireTag {getWireTag = 850}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ConvolutionParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConvolutionParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"data_param\"}, fieldNumber = FieldId {getFieldId = 107}, wireTag = WireTag {getWireTag = 858}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.dropout_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"dropout_param\"}, fieldNumber = FieldId {getFieldId = 108}, wireTag = WireTag {getWireTag = 866}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DropoutParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DropoutParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.dummy_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"dummy_data_param\"}, fieldNumber = FieldId {getFieldId = 109}, wireTag = WireTag {getWireTag = 874}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DummyDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DummyDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.eltwise_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"eltwise_param\"}, fieldNumber = FieldId {getFieldId = 110}, wireTag = WireTag {getWireTag = 882}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.EltwiseParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"EltwiseParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.exp_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"exp_param\"}, fieldNumber = FieldId {getFieldId = 111}, wireTag = WireTag {getWireTag = 890}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ExpParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ExpParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.hdf5_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"hdf5_data_param\"}, fieldNumber = FieldId {getFieldId = 112}, wireTag = WireTag {getWireTag = 898}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HDF5DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5DataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.hdf5_output_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"hdf5_output_param\"}, fieldNumber = FieldId {getFieldId = 113}, wireTag = WireTag {getWireTag = 906}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HDF5OutputParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5OutputParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.hinge_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"hinge_loss_param\"}, fieldNumber = FieldId {getFieldId = 114}, wireTag = WireTag {getWireTag = 914}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HingeLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HingeLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.image_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"image_data_param\"}, fieldNumber = FieldId {getFieldId = 115}, wireTag = WireTag {getWireTag = 922}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ImageDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ImageDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.infogain_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"infogain_loss_param\"}, fieldNumber = FieldId {getFieldId = 116}, wireTag = WireTag {getWireTag = 930}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.InfogainLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InfogainLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.inner_product_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"inner_product_param\"}, fieldNumber = FieldId {getFieldId = 117}, wireTag = WireTag {getWireTag = 938}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.InnerProductParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InnerProductParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.lrn_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"lrn_param\"}, fieldNumber = FieldId {getFieldId = 118}, wireTag = WireTag {getWireTag = 946}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LRNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LRNParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.memory_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"memory_data_param\"}, fieldNumber = FieldId {getFieldId = 119}, wireTag = WireTag {getWireTag = 954}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.MemoryDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MemoryDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.mvn_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"mvn_param\"}, fieldNumber = FieldId {getFieldId = 120}, wireTag = WireTag {getWireTag = 962}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.MVNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MVNParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.pooling_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"pooling_param\"}, fieldNumber = FieldId {getFieldId = 121}, wireTag = WireTag {getWireTag = 970}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PoolingParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PoolingParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.power_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"power_param\"}, fieldNumber = FieldId {getFieldId = 122}, wireTag = WireTag {getWireTag = 978}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PowerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PowerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.relu_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"relu_param\"}, fieldNumber = FieldId {getFieldId = 123}, wireTag = WireTag {getWireTag = 986}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ReLUParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ReLUParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.sigmoid_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"sigmoid_param\"}, fieldNumber = FieldId {getFieldId = 124}, wireTag = WireTag {getWireTag = 994}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SigmoidParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SigmoidParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.softmax_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"softmax_param\"}, fieldNumber = FieldId {getFieldId = 125}, wireTag = WireTag {getWireTag = 1002}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SoftmaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SoftmaxParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.slice_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"slice_param\"}, fieldNumber = FieldId {getFieldId = 126}, wireTag = WireTag {getWireTag = 1010}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SliceParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SliceParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.tanh_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"tanh_param\"}, fieldNumber = FieldId {getFieldId = 127}, wireTag = WireTag {getWireTag = 1018}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.TanHParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TanHParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.threshold_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"threshold_param\"}, fieldNumber = FieldId {getFieldId = 128}, wireTag = WireTag {getWireTag = 1026}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ThresholdParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ThresholdParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LayerParameter.window_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LayerParameter\"], baseName' = FName \"window_data_param\"}, fieldNumber = FieldId {getFieldId = 129}, wireTag = WireTag {getWireTag = 1034}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.WindowDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"WindowDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/LossParameter.hs b/Gen/Caffe/LossParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/LossParameter.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.LossParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data LossParameter = LossParameter{ignore_label :: !(P'.Maybe P'.Int32), normalize :: !(P'.Maybe P'.Bool)}
+                   deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''LossParameter
+
+ 
+instance P'.Mergeable LossParameter where
+  mergeAppend (LossParameter x'1 x'2) (LossParameter y'1 y'2) = LossParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)
+ 
+instance P'.Default LossParameter where
+  defaultValue = LossParameter P'.defaultValue (Prelude'.Just Prelude'.True)
+ 
+instance P'.Wire LossParameter where
+  wireSize ft' self'@(LossParameter x'1 x'2)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 5 x'1 + P'.wireSizeOpt 1 8 x'2)
+  wirePut ft' self'@(LossParameter x'1 x'2)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 5 x'1
+             P'.wirePutOpt 16 8 x'2
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{ignore_label = Prelude'.Just new'Field}) (P'.wireGet 5)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{normalize = Prelude'.Just new'Field}) (P'.wireGet 8)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> LossParameter) LossParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB LossParameter
+ 
+instance P'.ReflectDescriptor LossParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 16])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.LossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LossParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"LossParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LossParameter.ignore_label\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LossParameter\"], baseName' = FName \"ignore_label\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.LossParameter.normalize\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"LossParameter\"], baseName' = FName \"normalize\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/MVNParameter.hs b/Gen/Caffe/MVNParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/MVNParameter.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.MVNParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data MVNParameter = MVNParameter{normalize_variance :: !(P'.Maybe P'.Bool), across_channels :: !(P'.Maybe P'.Bool)}
+                  deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''MVNParameter
+
+ 
+instance P'.Mergeable MVNParameter where
+  mergeAppend (MVNParameter x'1 x'2) (MVNParameter y'1 y'2) = MVNParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)
+ 
+instance P'.Default MVNParameter where
+  defaultValue = MVNParameter (Prelude'.Just Prelude'.True) (Prelude'.Just Prelude'.False)
+ 
+instance P'.Wire MVNParameter where
+  wireSize ft' self'@(MVNParameter x'1 x'2)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 8 x'1 + P'.wireSizeOpt 1 8 x'2)
+  wirePut ft' self'@(MVNParameter x'1 x'2)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 8 x'1
+             P'.wirePutOpt 16 8 x'2
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{normalize_variance = Prelude'.Just new'Field}) (P'.wireGet 8)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{across_channels = Prelude'.Just new'Field}) (P'.wireGet 8)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> MVNParameter) MVNParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB MVNParameter
+ 
+instance P'.ReflectDescriptor MVNParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 16])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.MVNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MVNParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"MVNParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MVNParameter.normalize_variance\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MVNParameter\"], baseName' = FName \"normalize_variance\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MVNParameter.across_channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MVNParameter\"], baseName' = FName \"across_channels\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/MemoryDataParameter.hs b/Gen/Caffe/MemoryDataParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/MemoryDataParameter.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.MemoryDataParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data MemoryDataParameter = MemoryDataParameter{batch_size :: !(P'.Maybe P'.Word32), channels :: !(P'.Maybe P'.Word32),
+                                               height :: !(P'.Maybe P'.Word32), width :: !(P'.Maybe P'.Word32)}
+                         deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''MemoryDataParameter
+
+ 
+instance P'.Mergeable MemoryDataParameter where
+  mergeAppend (MemoryDataParameter x'1 x'2 x'3 x'4) (MemoryDataParameter y'1 y'2 y'3 y'4)
+   = MemoryDataParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+ 
+instance P'.Default MemoryDataParameter where
+  defaultValue = MemoryDataParameter P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue
+ 
+instance P'.Wire MemoryDataParameter where
+  wireSize ft' self'@(MemoryDataParameter x'1 x'2 x'3 x'4)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 13 x'1 + P'.wireSizeOpt 1 13 x'2 + P'.wireSizeOpt 1 13 x'3 + P'.wireSizeOpt 1 13 x'4)
+  wirePut ft' self'@(MemoryDataParameter x'1 x'2 x'3 x'4)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 13 x'1
+             P'.wirePutOpt 16 13 x'2
+             P'.wirePutOpt 24 13 x'3
+             P'.wirePutOpt 32 13 x'4
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{batch_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{channels = Prelude'.Just new'Field}) (P'.wireGet 13)
+             24 -> Prelude'.fmap (\ !new'Field -> old'Self{height = Prelude'.Just new'Field}) (P'.wireGet 13)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{width = Prelude'.Just new'Field}) (P'.wireGet 13)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> MemoryDataParameter) MemoryDataParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB MemoryDataParameter
+ 
+instance P'.ReflectDescriptor MemoryDataParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 16, 24, 32])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.MemoryDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MemoryDataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"MemoryDataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MemoryDataParameter.batch_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MemoryDataParameter\"], baseName' = FName \"batch_size\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MemoryDataParameter.channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MemoryDataParameter\"], baseName' = FName \"channels\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MemoryDataParameter.height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MemoryDataParameter\"], baseName' = FName \"height\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.MemoryDataParameter.width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"MemoryDataParameter\"], baseName' = FName \"width\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/NetParameter.hs b/Gen/Caffe/NetParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/NetParameter.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.NetParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.LayerParameter as Caffe (LayerParameter)
+import qualified Gen.Caffe.NetState as Caffe (NetState)
+import qualified Gen.Caffe.V1LayerParameter as Caffe (V1LayerParameter)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data NetParameter = NetParameter{name :: !(P'.Maybe P'.Utf8), input :: !(P'.Seq P'.Utf8), input_dim :: !(P'.Seq P'.Int32),
+                                 force_backward :: !(P'.Maybe P'.Bool), state :: !(P'.Maybe Caffe.NetState),
+                                 debug_info :: !(P'.Maybe P'.Bool), layer :: !(P'.Seq Caffe.LayerParameter),
+                                 layers :: !(P'.Seq Caffe.V1LayerParameter)}
+                  deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''NetParameter
+
+ 
+instance P'.Mergeable NetParameter where
+  mergeAppend (NetParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8) (NetParameter y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8)
+   = NetParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+      (P'.mergeAppend x'8 y'8)
+ 
+instance P'.Default NetParameter where
+  defaultValue
+   = NetParameter P'.defaultValue P'.defaultValue P'.defaultValue (Prelude'.Just Prelude'.False) P'.defaultValue
+      (Prelude'.Just Prelude'.False)
+      P'.defaultValue
+      P'.defaultValue
+ 
+instance P'.Wire NetParameter where
+  wireSize ft' self'@(NetParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 9 x'1 + P'.wireSizeRep 1 9 x'2 + P'.wireSizeRep 1 5 x'3 + P'.wireSizeOpt 1 8 x'4 +
+             P'.wireSizeOpt 1 11 x'5
+             + P'.wireSizeOpt 1 8 x'6
+             + P'.wireSizeRep 2 11 x'7
+             + P'.wireSizeRep 1 11 x'8)
+  wirePut ft' self'@(NetParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'1
+             P'.wirePutRep 18 11 x'8
+             P'.wirePutRep 26 9 x'2
+             P'.wirePutRep 32 5 x'3
+             P'.wirePutOpt 40 8 x'4
+             P'.wirePutOpt 50 11 x'5
+             P'.wirePutOpt 56 8 x'6
+             P'.wirePutRep 802 11 x'7
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{name = Prelude'.Just new'Field}) (P'.wireGet 9)
+             26 -> Prelude'.fmap (\ !new'Field -> old'Self{input = P'.append (input old'Self) new'Field}) (P'.wireGet 9)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{input_dim = P'.append (input_dim old'Self) new'Field}) (P'.wireGet 5)
+             34 -> Prelude'.fmap (\ !new'Field -> old'Self{input_dim = P'.mergeAppend (input_dim old'Self) new'Field})
+                    (P'.wireGetPacked 5)
+             40 -> Prelude'.fmap (\ !new'Field -> old'Self{force_backward = Prelude'.Just new'Field}) (P'.wireGet 8)
+             50 -> Prelude'.fmap (\ !new'Field -> old'Self{state = P'.mergeAppend (state old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             56 -> Prelude'.fmap (\ !new'Field -> old'Self{debug_info = Prelude'.Just new'Field}) (P'.wireGet 8)
+             802 -> Prelude'.fmap (\ !new'Field -> old'Self{layer = P'.append (layer old'Self) new'Field}) (P'.wireGet 11)
+             18 -> Prelude'.fmap (\ !new'Field -> old'Self{layers = P'.append (layers old'Self) new'Field}) (P'.wireGet 11)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> NetParameter) NetParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB NetParameter
+ 
+instance P'.ReflectDescriptor NetParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [10, 18, 26, 32, 34, 40, 50, 56, 802])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.NetParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"NetParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"name\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.input\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"input\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.input_dim\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"input_dim\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Just (WireTag {getWireTag = 32},WireTag {getWireTag = 34}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.force_backward\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"force_backward\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.state\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"state\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 50}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetState\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetState\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.debug_info\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"debug_info\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.layer\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"layer\"}, fieldNumber = FieldId {getFieldId = 100}, wireTag = WireTag {getWireTag = 802}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LayerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetParameter.layers\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetParameter\"], baseName' = FName \"layers\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.V1LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"V1LayerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/NetState.hs b/Gen/Caffe/NetState.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/NetState.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.NetState  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.Phase as Caffe (Phase)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data NetState = NetState{phase :: !(P'.Maybe Caffe.Phase), level :: !(P'.Maybe P'.Int32), stage :: !(P'.Seq P'.Utf8)}
+              deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''NetState
+
+ 
+instance P'.Mergeable NetState where
+  mergeAppend (NetState x'1 x'2 x'3) (NetState y'1 y'2 y'3)
+   = NetState (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3)
+ 
+instance P'.Default NetState where
+  defaultValue = NetState (Prelude'.Just (Prelude'.read "TEST")) (Prelude'.Just 0) P'.defaultValue
+ 
+instance P'.Wire NetState where
+  wireSize ft' self'@(NetState x'1 x'2 x'3)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 14 x'1 + P'.wireSizeOpt 1 5 x'2 + P'.wireSizeRep 1 9 x'3)
+  wirePut ft' self'@(NetState x'1 x'2 x'3)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 14 x'1
+             P'.wirePutOpt 16 5 x'2
+             P'.wirePutRep 26 9 x'3
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{phase = Prelude'.Just new'Field}) (P'.wireGet 14)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{level = Prelude'.Just new'Field}) (P'.wireGet 5)
+             26 -> Prelude'.fmap (\ !new'Field -> old'Self{stage = P'.append (stage old'Self) new'Field}) (P'.wireGet 9)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> NetState) NetState where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB NetState
+ 
+instance P'.ReflectDescriptor NetState where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 16, 26])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.NetState\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetState\"}, descFilePath = [\"Gen\",\"Caffe\",\"NetState.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetState.phase\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetState\"], baseName' = FName \"phase\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.Phase\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"Phase\"}), hsRawDefault = Just \"TEST\", hsDefault = Just (HsDef'Enum \"TEST\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetState.level\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetState\"], baseName' = FName \"level\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetState.stage\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetState\"], baseName' = FName \"stage\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/NetStateRule.hs b/Gen/Caffe/NetStateRule.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/NetStateRule.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.NetStateRule  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.Phase as Caffe (Phase)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data NetStateRule = NetStateRule{phase :: !(P'.Maybe Caffe.Phase), min_level :: !(P'.Maybe P'.Int32),
+                                 max_level :: !(P'.Maybe P'.Int32), stage :: !(P'.Seq P'.Utf8), not_stage :: !(P'.Seq P'.Utf8)}
+                  deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''NetStateRule
+
+ 
+instance P'.Mergeable NetStateRule where
+  mergeAppend (NetStateRule x'1 x'2 x'3 x'4 x'5) (NetStateRule y'1 y'2 y'3 y'4 y'5)
+   = NetStateRule (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+ 
+instance P'.Default NetStateRule where
+  defaultValue = NetStateRule P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue
+ 
+instance P'.Wire NetStateRule where
+  wireSize ft' self'@(NetStateRule x'1 x'2 x'3 x'4 x'5)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 14 x'1 + P'.wireSizeOpt 1 5 x'2 + P'.wireSizeOpt 1 5 x'3 + P'.wireSizeRep 1 9 x'4 +
+             P'.wireSizeRep 1 9 x'5)
+  wirePut ft' self'@(NetStateRule x'1 x'2 x'3 x'4 x'5)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 14 x'1
+             P'.wirePutOpt 16 5 x'2
+             P'.wirePutOpt 24 5 x'3
+             P'.wirePutRep 34 9 x'4
+             P'.wirePutRep 42 9 x'5
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{phase = Prelude'.Just new'Field}) (P'.wireGet 14)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{min_level = Prelude'.Just new'Field}) (P'.wireGet 5)
+             24 -> Prelude'.fmap (\ !new'Field -> old'Self{max_level = Prelude'.Just new'Field}) (P'.wireGet 5)
+             34 -> Prelude'.fmap (\ !new'Field -> old'Self{stage = P'.append (stage old'Self) new'Field}) (P'.wireGet 9)
+             42 -> Prelude'.fmap (\ !new'Field -> old'Self{not_stage = P'.append (not_stage old'Self) new'Field}) (P'.wireGet 9)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> NetStateRule) NetStateRule where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB NetStateRule
+ 
+instance P'.ReflectDescriptor NetStateRule where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 16, 24, 34, 42])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.NetStateRule\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetStateRule\"}, descFilePath = [\"Gen\",\"Caffe\",\"NetStateRule.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetStateRule.phase\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetStateRule\"], baseName' = FName \"phase\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.Phase\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"Phase\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetStateRule.min_level\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetStateRule\"], baseName' = FName \"min_level\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetStateRule.max_level\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetStateRule\"], baseName' = FName \"max_level\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetStateRule.stage\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetStateRule\"], baseName' = FName \"stage\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.NetStateRule.not_stage\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"NetStateRule\"], baseName' = FName \"not_stage\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/ParamSpec.hs b/Gen/Caffe/ParamSpec.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ParamSpec.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ParamSpec  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.ParamSpec.DimCheckMode as Caffe.ParamSpec (DimCheckMode)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data ParamSpec = ParamSpec{name :: !(P'.Maybe P'.Utf8), share_mode :: !(P'.Maybe Caffe.ParamSpec.DimCheckMode),
+                           lr_mult :: !(P'.Maybe P'.Float), decay_mult :: !(P'.Maybe P'.Float)}
+               deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''ParamSpec
+
+ 
+instance P'.Mergeable ParamSpec where
+  mergeAppend (ParamSpec x'1 x'2 x'3 x'4) (ParamSpec y'1 y'2 y'3 y'4)
+   = ParamSpec (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+ 
+instance P'.Default ParamSpec where
+  defaultValue = ParamSpec P'.defaultValue P'.defaultValue (Prelude'.Just 1.0) (Prelude'.Just 1.0)
+ 
+instance P'.Wire ParamSpec where
+  wireSize ft' self'@(ParamSpec x'1 x'2 x'3 x'4)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 9 x'1 + P'.wireSizeOpt 1 14 x'2 + P'.wireSizeOpt 1 2 x'3 + P'.wireSizeOpt 1 2 x'4)
+  wirePut ft' self'@(ParamSpec x'1 x'2 x'3 x'4)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'1
+             P'.wirePutOpt 16 14 x'2
+             P'.wirePutOpt 29 2 x'3
+             P'.wirePutOpt 37 2 x'4
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{name = Prelude'.Just new'Field}) (P'.wireGet 9)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{share_mode = Prelude'.Just new'Field}) (P'.wireGet 14)
+             29 -> Prelude'.fmap (\ !new'Field -> old'Self{lr_mult = Prelude'.Just new'Field}) (P'.wireGet 2)
+             37 -> Prelude'.fmap (\ !new'Field -> old'Self{decay_mult = Prelude'.Just new'Field}) (P'.wireGet 2)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> ParamSpec) ParamSpec where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB ParamSpec
+ 
+instance P'.ReflectDescriptor ParamSpec where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [10, 16, 29, 37])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ParamSpec\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ParamSpec\"}, descFilePath = [\"Gen\",\"Caffe\",\"ParamSpec.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ParamSpec.name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ParamSpec\"], baseName' = FName \"name\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ParamSpec.share_mode\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ParamSpec\"], baseName' = FName \"share_mode\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ParamSpec.DimCheckMode\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"ParamSpec\"], baseName = MName \"DimCheckMode\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ParamSpec.lr_mult\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ParamSpec\"], baseName' = FName \"lr_mult\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 29}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ParamSpec.decay_mult\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ParamSpec\"], baseName' = FName \"decay_mult\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 37}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/ParamSpec/DimCheckMode.hs b/Gen/Caffe/ParamSpec/DimCheckMode.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ParamSpec/DimCheckMode.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ParamSpec.DimCheckMode  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data DimCheckMode = STRICT
+                  | PERMISSIVE
+                  deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''DimCheckMode
+
+ 
+instance P'.Mergeable DimCheckMode
+ 
+instance Prelude'.Bounded DimCheckMode where
+  minBound = STRICT
+  maxBound = PERMISSIVE
+ 
+instance P'.Default DimCheckMode where
+  defaultValue = STRICT
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe DimCheckMode
+toMaybe'Enum 0 = Prelude'.Just STRICT
+toMaybe'Enum 1 = Prelude'.Just PERMISSIVE
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum DimCheckMode where
+  fromEnum STRICT = 0
+  fromEnum PERMISSIVE = 1
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.ParamSpec.DimCheckMode") . toMaybe'Enum
+  succ STRICT = PERMISSIVE
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.ParamSpec.DimCheckMode"
+  pred PERMISSIVE = STRICT
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.ParamSpec.DimCheckMode"
+ 
+instance P'.Wire DimCheckMode where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB DimCheckMode
+ 
+instance P'.MessageAPI msg' (msg' -> DimCheckMode) DimCheckMode where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum DimCheckMode where
+  reflectEnum = [(0, "STRICT", STRICT), (1, "PERMISSIVE", PERMISSIVE)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.ParamSpec.DimCheckMode") ["Gen"] ["Caffe", "ParamSpec"] "DimCheckMode")
+      ["Gen", "Caffe", "ParamSpec", "DimCheckMode.hs"]
+      [(0, "STRICT"), (1, "PERMISSIVE")]
diff --git a/Gen/Caffe/Phase.hs b/Gen/Caffe/Phase.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/Phase.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.Phase  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data Phase = TRAIN
+           | TEST
+           deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''Phase
+
+ 
+instance P'.Mergeable Phase
+ 
+instance Prelude'.Bounded Phase where
+  minBound = TRAIN
+  maxBound = TEST
+ 
+instance P'.Default Phase where
+  defaultValue = TRAIN
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe Phase
+toMaybe'Enum 0 = Prelude'.Just TRAIN
+toMaybe'Enum 1 = Prelude'.Just TEST
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum Phase where
+  fromEnum TRAIN = 0
+  fromEnum TEST = 1
+  toEnum = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.Phase") . toMaybe'Enum
+  succ TRAIN = TEST
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.Phase"
+  pred TEST = TRAIN
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.Phase"
+ 
+instance P'.Wire Phase where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB Phase
+ 
+instance P'.MessageAPI msg' (msg' -> Phase) Phase where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum Phase where
+  reflectEnum = [(0, "TRAIN", TRAIN), (1, "TEST", TEST)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.Phase") ["Gen"] ["Caffe"] "Phase") ["Gen", "Caffe", "Phase.hs"]
+      [(0, "TRAIN"), (1, "TEST")]
diff --git a/Gen/Caffe/PoolingParameter.hs b/Gen/Caffe/PoolingParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/PoolingParameter.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.PoolingParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.PoolingParameter.Engine as Caffe.PoolingParameter (Engine)
+import qualified Gen.Caffe.PoolingParameter.PoolMethod as Caffe.PoolingParameter (PoolMethod)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data PoolingParameter = PoolingParameter{pool :: !(P'.Maybe Caffe.PoolingParameter.PoolMethod), pad :: !(P'.Maybe P'.Word32),
+                                         pad_h :: !(P'.Maybe P'.Word32), pad_w :: !(P'.Maybe P'.Word32),
+                                         kernel_size :: !(P'.Maybe P'.Word32), kernel_h :: !(P'.Maybe P'.Word32),
+                                         kernel_w :: !(P'.Maybe P'.Word32), stride :: !(P'.Maybe P'.Word32),
+                                         stride_h :: !(P'.Maybe P'.Word32), stride_w :: !(P'.Maybe P'.Word32),
+                                         engine :: !(P'.Maybe Caffe.PoolingParameter.Engine), global_pooling :: !(P'.Maybe P'.Bool)}
+                      deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''PoolingParameter
+
+ 
+instance P'.Mergeable PoolingParameter where
+  mergeAppend (PoolingParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12)
+   (PoolingParameter y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9 y'10 y'11 y'12)
+   = PoolingParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+      (P'.mergeAppend x'8 y'8)
+      (P'.mergeAppend x'9 y'9)
+      (P'.mergeAppend x'10 y'10)
+      (P'.mergeAppend x'11 y'11)
+      (P'.mergeAppend x'12 y'12)
+ 
+instance P'.Default PoolingParameter where
+  defaultValue
+   = PoolingParameter (Prelude'.Just (Prelude'.read "MAX")) (Prelude'.Just 0) (Prelude'.Just 0) (Prelude'.Just 0) P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      (Prelude'.Just 1)
+      P'.defaultValue
+      P'.defaultValue
+      (Prelude'.Just (Prelude'.read "DEFAULT"))
+      (Prelude'.Just Prelude'.False)
+ 
+instance P'.Wire PoolingParameter where
+  wireSize ft' self'@(PoolingParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 14 x'1 + P'.wireSizeOpt 1 13 x'2 + P'.wireSizeOpt 1 13 x'3 + P'.wireSizeOpt 1 13 x'4 +
+             P'.wireSizeOpt 1 13 x'5
+             + P'.wireSizeOpt 1 13 x'6
+             + P'.wireSizeOpt 1 13 x'7
+             + P'.wireSizeOpt 1 13 x'8
+             + P'.wireSizeOpt 1 13 x'9
+             + P'.wireSizeOpt 1 13 x'10
+             + P'.wireSizeOpt 1 14 x'11
+             + P'.wireSizeOpt 1 8 x'12)
+  wirePut ft' self'@(PoolingParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 14 x'1
+             P'.wirePutOpt 16 13 x'5
+             P'.wirePutOpt 24 13 x'8
+             P'.wirePutOpt 32 13 x'2
+             P'.wirePutOpt 40 13 x'6
+             P'.wirePutOpt 48 13 x'7
+             P'.wirePutOpt 56 13 x'9
+             P'.wirePutOpt 64 13 x'10
+             P'.wirePutOpt 72 13 x'3
+             P'.wirePutOpt 80 13 x'4
+             P'.wirePutOpt 88 14 x'11
+             P'.wirePutOpt 96 8 x'12
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{pool = Prelude'.Just new'Field}) (P'.wireGet 14)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{pad = Prelude'.Just new'Field}) (P'.wireGet 13)
+             72 -> Prelude'.fmap (\ !new'Field -> old'Self{pad_h = Prelude'.Just new'Field}) (P'.wireGet 13)
+             80 -> Prelude'.fmap (\ !new'Field -> old'Self{pad_w = Prelude'.Just new'Field}) (P'.wireGet 13)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{kernel_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             40 -> Prelude'.fmap (\ !new'Field -> old'Self{kernel_h = Prelude'.Just new'Field}) (P'.wireGet 13)
+             48 -> Prelude'.fmap (\ !new'Field -> old'Self{kernel_w = Prelude'.Just new'Field}) (P'.wireGet 13)
+             24 -> Prelude'.fmap (\ !new'Field -> old'Self{stride = Prelude'.Just new'Field}) (P'.wireGet 13)
+             56 -> Prelude'.fmap (\ !new'Field -> old'Self{stride_h = Prelude'.Just new'Field}) (P'.wireGet 13)
+             64 -> Prelude'.fmap (\ !new'Field -> old'Self{stride_w = Prelude'.Just new'Field}) (P'.wireGet 13)
+             88 -> Prelude'.fmap (\ !new'Field -> old'Self{engine = Prelude'.Just new'Field}) (P'.wireGet 14)
+             96 -> Prelude'.fmap (\ !new'Field -> old'Self{global_pooling = Prelude'.Just new'Field}) (P'.wireGet 8)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> PoolingParameter) PoolingParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB PoolingParameter
+ 
+instance P'.ReflectDescriptor PoolingParameter where
+  getMessageInfo _
+   = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.PoolingParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PoolingParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"PoolingParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.pool\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"pool\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PoolingParameter.PoolMethod\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"PoolingParameter\"], baseName = MName \"PoolMethod\"}), hsRawDefault = Just \"MAX\", hsDefault = Just (HsDef'Enum \"MAX\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.pad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"pad\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.pad_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"pad_h\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 72}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.pad_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"pad_w\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 80}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.kernel_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"kernel_size\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.kernel_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"kernel_h\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.kernel_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"kernel_w\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.stride\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"stride\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.stride_h\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"stride_h\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.stride_w\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"stride_w\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PoolingParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"PoolingParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PoolingParameter.global_pooling\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PoolingParameter\"], baseName' = FName \"global_pooling\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 96}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/PoolingParameter/Engine.hs b/Gen/Caffe/PoolingParameter/Engine.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/PoolingParameter/Engine.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.PoolingParameter.Engine  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data Engine = DEFAULT
+            | CAFFE
+            | CUDNN
+            deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''Engine
+
+ 
+instance P'.Mergeable Engine
+ 
+instance Prelude'.Bounded Engine where
+  minBound = DEFAULT
+  maxBound = CUDNN
+ 
+instance P'.Default Engine where
+  defaultValue = DEFAULT
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe Engine
+toMaybe'Enum 0 = Prelude'.Just DEFAULT
+toMaybe'Enum 1 = Prelude'.Just CAFFE
+toMaybe'Enum 2 = Prelude'.Just CUDNN
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum Engine where
+  fromEnum DEFAULT = 0
+  fromEnum CAFFE = 1
+  fromEnum CUDNN = 2
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.PoolingParameter.Engine") .
+      toMaybe'Enum
+  succ DEFAULT = CAFFE
+  succ CAFFE = CUDNN
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.PoolingParameter.Engine"
+  pred CAFFE = DEFAULT
+  pred CUDNN = CAFFE
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.PoolingParameter.Engine"
+ 
+instance P'.Wire Engine where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB Engine
+ 
+instance P'.MessageAPI msg' (msg' -> Engine) Engine where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum Engine where
+  reflectEnum = [(0, "DEFAULT", DEFAULT), (1, "CAFFE", CAFFE), (2, "CUDNN", CUDNN)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.PoolingParameter.Engine") ["Gen"] ["Caffe", "PoolingParameter"] "Engine")
+      ["Gen", "Caffe", "PoolingParameter", "Engine.hs"]
+      [(0, "DEFAULT"), (1, "CAFFE"), (2, "CUDNN")]
diff --git a/Gen/Caffe/PoolingParameter/PoolMethod.hs b/Gen/Caffe/PoolingParameter/PoolMethod.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/PoolingParameter/PoolMethod.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.PoolingParameter.PoolMethod  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data PoolMethod = MAX
+                | AVE
+                | STOCHASTIC
+                deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''PoolMethod
+
+ 
+instance P'.Mergeable PoolMethod
+ 
+instance Prelude'.Bounded PoolMethod where
+  minBound = MAX
+  maxBound = STOCHASTIC
+ 
+instance P'.Default PoolMethod where
+  defaultValue = MAX
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe PoolMethod
+toMaybe'Enum 0 = Prelude'.Just MAX
+toMaybe'Enum 1 = Prelude'.Just AVE
+toMaybe'Enum 2 = Prelude'.Just STOCHASTIC
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum PoolMethod where
+  fromEnum MAX = 0
+  fromEnum AVE = 1
+  fromEnum STOCHASTIC = 2
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.PoolingParameter.PoolMethod") .
+      toMaybe'Enum
+  succ MAX = AVE
+  succ AVE = STOCHASTIC
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.PoolingParameter.PoolMethod"
+  pred AVE = MAX
+  pred STOCHASTIC = AVE
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.PoolingParameter.PoolMethod"
+ 
+instance P'.Wire PoolMethod where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB PoolMethod
+ 
+instance P'.MessageAPI msg' (msg' -> PoolMethod) PoolMethod where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum PoolMethod where
+  reflectEnum = [(0, "MAX", MAX), (1, "AVE", AVE), (2, "STOCHASTIC", STOCHASTIC)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.PoolingParameter.PoolMethod") ["Gen"] ["Caffe", "PoolingParameter"] "PoolMethod")
+      ["Gen", "Caffe", "PoolingParameter", "PoolMethod.hs"]
+      [(0, "MAX"), (1, "AVE"), (2, "STOCHASTIC")]
diff --git a/Gen/Caffe/PowerParameter.hs b/Gen/Caffe/PowerParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/PowerParameter.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.PowerParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data PowerParameter = PowerParameter{power :: !(P'.Maybe P'.Float), scale :: !(P'.Maybe P'.Float), shift :: !(P'.Maybe P'.Float)}
+                    deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''PowerParameter
+
+ 
+instance P'.Mergeable PowerParameter where
+  mergeAppend (PowerParameter x'1 x'2 x'3) (PowerParameter y'1 y'2 y'3)
+   = PowerParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3)
+ 
+instance P'.Default PowerParameter where
+  defaultValue = PowerParameter (Prelude'.Just 1.0) (Prelude'.Just 1.0) (Prelude'.Just 0.0)
+ 
+instance P'.Wire PowerParameter where
+  wireSize ft' self'@(PowerParameter x'1 x'2 x'3)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 2 x'1 + P'.wireSizeOpt 1 2 x'2 + P'.wireSizeOpt 1 2 x'3)
+  wirePut ft' self'@(PowerParameter x'1 x'2 x'3)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 13 2 x'1
+             P'.wirePutOpt 21 2 x'2
+             P'.wirePutOpt 29 2 x'3
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             13 -> Prelude'.fmap (\ !new'Field -> old'Self{power = Prelude'.Just new'Field}) (P'.wireGet 2)
+             21 -> Prelude'.fmap (\ !new'Field -> old'Self{scale = Prelude'.Just new'Field}) (P'.wireGet 2)
+             29 -> Prelude'.fmap (\ !new'Field -> old'Self{shift = Prelude'.Just new'Field}) (P'.wireGet 2)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> PowerParameter) PowerParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB PowerParameter
+ 
+instance P'.ReflectDescriptor PowerParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [13, 21, 29])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.PowerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PowerParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"PowerParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PowerParameter.power\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PowerParameter\"], baseName' = FName \"power\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PowerParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PowerParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.PowerParameter.shift\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"PowerParameter\"], baseName' = FName \"shift\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 29}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/ReLUParameter.hs b/Gen/Caffe/ReLUParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ReLUParameter.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ReLUParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.ReLUParameter.Engine as Caffe.ReLUParameter (Engine)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data ReLUParameter = ReLUParameter{negative_slope :: !(P'.Maybe P'.Float), engine :: !(P'.Maybe Caffe.ReLUParameter.Engine)}
+                   deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''ReLUParameter
+
+ 
+instance P'.Mergeable ReLUParameter where
+  mergeAppend (ReLUParameter x'1 x'2) (ReLUParameter y'1 y'2) = ReLUParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)
+ 
+instance P'.Default ReLUParameter where
+  defaultValue = ReLUParameter (Prelude'.Just 0.0) (Prelude'.Just (Prelude'.read "DEFAULT"))
+ 
+instance P'.Wire ReLUParameter where
+  wireSize ft' self'@(ReLUParameter x'1 x'2)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 2 x'1 + P'.wireSizeOpt 1 14 x'2)
+  wirePut ft' self'@(ReLUParameter x'1 x'2)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 13 2 x'1
+             P'.wirePutOpt 16 14 x'2
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             13 -> Prelude'.fmap (\ !new'Field -> old'Self{negative_slope = Prelude'.Just new'Field}) (P'.wireGet 2)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{engine = Prelude'.Just new'Field}) (P'.wireGet 14)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> ReLUParameter) ReLUParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB ReLUParameter
+ 
+instance P'.ReflectDescriptor ReLUParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [13, 16])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ReLUParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ReLUParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ReLUParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ReLUParameter.negative_slope\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ReLUParameter\"], baseName' = FName \"negative_slope\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ReLUParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ReLUParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ReLUParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"ReLUParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/ReLUParameter/Engine.hs b/Gen/Caffe/ReLUParameter/Engine.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ReLUParameter/Engine.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ReLUParameter.Engine  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data Engine = DEFAULT
+            | CAFFE
+            | CUDNN
+            deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''Engine
+
+ 
+instance P'.Mergeable Engine
+ 
+instance Prelude'.Bounded Engine where
+  minBound = DEFAULT
+  maxBound = CUDNN
+ 
+instance P'.Default Engine where
+  defaultValue = DEFAULT
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe Engine
+toMaybe'Enum 0 = Prelude'.Just DEFAULT
+toMaybe'Enum 1 = Prelude'.Just CAFFE
+toMaybe'Enum 2 = Prelude'.Just CUDNN
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum Engine where
+  fromEnum DEFAULT = 0
+  fromEnum CAFFE = 1
+  fromEnum CUDNN = 2
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.ReLUParameter.Engine") . toMaybe'Enum
+  succ DEFAULT = CAFFE
+  succ CAFFE = CUDNN
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.ReLUParameter.Engine"
+  pred CAFFE = DEFAULT
+  pred CUDNN = CAFFE
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.ReLUParameter.Engine"
+ 
+instance P'.Wire Engine where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB Engine
+ 
+instance P'.MessageAPI msg' (msg' -> Engine) Engine where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum Engine where
+  reflectEnum = [(0, "DEFAULT", DEFAULT), (1, "CAFFE", CAFFE), (2, "CUDNN", CUDNN)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.ReLUParameter.Engine") ["Gen"] ["Caffe", "ReLUParameter"] "Engine")
+      ["Gen", "Caffe", "ReLUParameter", "Engine.hs"]
+      [(0, "DEFAULT"), (1, "CAFFE"), (2, "CUDNN")]
diff --git a/Gen/Caffe/SigmoidParameter.hs b/Gen/Caffe/SigmoidParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/SigmoidParameter.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.SigmoidParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.SigmoidParameter.Engine as Caffe.SigmoidParameter (Engine)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data SigmoidParameter = SigmoidParameter{engine :: !(P'.Maybe Caffe.SigmoidParameter.Engine)}
+                      deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''SigmoidParameter
+
+ 
+instance P'.Mergeable SigmoidParameter where
+  mergeAppend (SigmoidParameter x'1) (SigmoidParameter y'1) = SigmoidParameter (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default SigmoidParameter where
+  defaultValue = SigmoidParameter (Prelude'.Just (Prelude'.read "DEFAULT"))
+ 
+instance P'.Wire SigmoidParameter where
+  wireSize ft' self'@(SigmoidParameter x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 14 x'1)
+  wirePut ft' self'@(SigmoidParameter x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 14 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{engine = Prelude'.Just new'Field}) (P'.wireGet 14)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> SigmoidParameter) SigmoidParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB SigmoidParameter
+ 
+instance P'.ReflectDescriptor SigmoidParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.SigmoidParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SigmoidParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"SigmoidParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SigmoidParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SigmoidParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SigmoidParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SigmoidParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/SigmoidParameter/Engine.hs b/Gen/Caffe/SigmoidParameter/Engine.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/SigmoidParameter/Engine.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.SigmoidParameter.Engine  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data Engine = DEFAULT
+            | CAFFE
+            | CUDNN
+            deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''Engine
+
+ 
+instance P'.Mergeable Engine
+ 
+instance Prelude'.Bounded Engine where
+  minBound = DEFAULT
+  maxBound = CUDNN
+ 
+instance P'.Default Engine where
+  defaultValue = DEFAULT
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe Engine
+toMaybe'Enum 0 = Prelude'.Just DEFAULT
+toMaybe'Enum 1 = Prelude'.Just CAFFE
+toMaybe'Enum 2 = Prelude'.Just CUDNN
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum Engine where
+  fromEnum DEFAULT = 0
+  fromEnum CAFFE = 1
+  fromEnum CUDNN = 2
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.SigmoidParameter.Engine") .
+      toMaybe'Enum
+  succ DEFAULT = CAFFE
+  succ CAFFE = CUDNN
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.SigmoidParameter.Engine"
+  pred CAFFE = DEFAULT
+  pred CUDNN = CAFFE
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.SigmoidParameter.Engine"
+ 
+instance P'.Wire Engine where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB Engine
+ 
+instance P'.MessageAPI msg' (msg' -> Engine) Engine where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum Engine where
+  reflectEnum = [(0, "DEFAULT", DEFAULT), (1, "CAFFE", CAFFE), (2, "CUDNN", CUDNN)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.SigmoidParameter.Engine") ["Gen"] ["Caffe", "SigmoidParameter"] "Engine")
+      ["Gen", "Caffe", "SigmoidParameter", "Engine.hs"]
+      [(0, "DEFAULT"), (1, "CAFFE"), (2, "CUDNN")]
diff --git a/Gen/Caffe/SliceParameter.hs b/Gen/Caffe/SliceParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/SliceParameter.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.SliceParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data SliceParameter = SliceParameter{slice_dim :: !(P'.Maybe P'.Word32), slice_point :: !(P'.Seq P'.Word32)}
+                    deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''SliceParameter
+
+ 
+instance P'.Mergeable SliceParameter where
+  mergeAppend (SliceParameter x'1 x'2) (SliceParameter y'1 y'2) = SliceParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2)
+ 
+instance P'.Default SliceParameter where
+  defaultValue = SliceParameter (Prelude'.Just 1) P'.defaultValue
+ 
+instance P'.Wire SliceParameter where
+  wireSize ft' self'@(SliceParameter x'1 x'2)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 13 x'1 + P'.wireSizeRep 1 13 x'2)
+  wirePut ft' self'@(SliceParameter x'1 x'2)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 13 x'1
+             P'.wirePutRep 16 13 x'2
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{slice_dim = Prelude'.Just new'Field}) (P'.wireGet 13)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{slice_point = P'.append (slice_point old'Self) new'Field})
+                    (P'.wireGet 13)
+             18 -> Prelude'.fmap (\ !new'Field -> old'Self{slice_point = P'.mergeAppend (slice_point old'Self) new'Field})
+                    (P'.wireGetPacked 13)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> SliceParameter) SliceParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB SliceParameter
+ 
+instance P'.ReflectDescriptor SliceParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 16, 18])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.SliceParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SliceParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"SliceParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SliceParameter.slice_dim\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SliceParameter\"], baseName' = FName \"slice_dim\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SliceParameter.slice_point\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SliceParameter\"], baseName' = FName \"slice_point\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Just (WireTag {getWireTag = 16},WireTag {getWireTag = 18}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/SoftmaxParameter.hs b/Gen/Caffe/SoftmaxParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/SoftmaxParameter.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.SoftmaxParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.SoftmaxParameter.Engine as Caffe.SoftmaxParameter (Engine)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data SoftmaxParameter = SoftmaxParameter{engine :: !(P'.Maybe Caffe.SoftmaxParameter.Engine)}
+                      deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''SoftmaxParameter
+
+ 
+instance P'.Mergeable SoftmaxParameter where
+  mergeAppend (SoftmaxParameter x'1) (SoftmaxParameter y'1) = SoftmaxParameter (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default SoftmaxParameter where
+  defaultValue = SoftmaxParameter (Prelude'.Just (Prelude'.read "DEFAULT"))
+ 
+instance P'.Wire SoftmaxParameter where
+  wireSize ft' self'@(SoftmaxParameter x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 14 x'1)
+  wirePut ft' self'@(SoftmaxParameter x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 14 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{engine = Prelude'.Just new'Field}) (P'.wireGet 14)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> SoftmaxParameter) SoftmaxParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB SoftmaxParameter
+ 
+instance P'.ReflectDescriptor SoftmaxParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.SoftmaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SoftmaxParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"SoftmaxParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SoftmaxParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SoftmaxParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SoftmaxParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SoftmaxParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/SoftmaxParameter/Engine.hs b/Gen/Caffe/SoftmaxParameter/Engine.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/SoftmaxParameter/Engine.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.SoftmaxParameter.Engine  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data Engine = DEFAULT
+            | CAFFE
+            | CUDNN
+            deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''Engine
+
+ 
+instance P'.Mergeable Engine
+ 
+instance Prelude'.Bounded Engine where
+  minBound = DEFAULT
+  maxBound = CUDNN
+ 
+instance P'.Default Engine where
+  defaultValue = DEFAULT
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe Engine
+toMaybe'Enum 0 = Prelude'.Just DEFAULT
+toMaybe'Enum 1 = Prelude'.Just CAFFE
+toMaybe'Enum 2 = Prelude'.Just CUDNN
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum Engine where
+  fromEnum DEFAULT = 0
+  fromEnum CAFFE = 1
+  fromEnum CUDNN = 2
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.SoftmaxParameter.Engine") .
+      toMaybe'Enum
+  succ DEFAULT = CAFFE
+  succ CAFFE = CUDNN
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.SoftmaxParameter.Engine"
+  pred CAFFE = DEFAULT
+  pred CUDNN = CAFFE
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.SoftmaxParameter.Engine"
+ 
+instance P'.Wire Engine where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB Engine
+ 
+instance P'.MessageAPI msg' (msg' -> Engine) Engine where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum Engine where
+  reflectEnum = [(0, "DEFAULT", DEFAULT), (1, "CAFFE", CAFFE), (2, "CUDNN", CUDNN)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.SoftmaxParameter.Engine") ["Gen"] ["Caffe", "SoftmaxParameter"] "Engine")
+      ["Gen", "Caffe", "SoftmaxParameter", "Engine.hs"]
+      [(0, "DEFAULT"), (1, "CAFFE"), (2, "CUDNN")]
diff --git a/Gen/Caffe/SolverParameter.hs b/Gen/Caffe/SolverParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/SolverParameter.hs
@@ -0,0 +1,264 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.SolverParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.NetParameter as Caffe (NetParameter)
+import qualified Gen.Caffe.NetState as Caffe (NetState)
+import qualified Gen.Caffe.SolverParameter.SolverMode as Caffe.SolverParameter (SolverMode)
+import qualified Gen.Caffe.SolverParameter.SolverType as Caffe.SolverParameter (SolverType)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data SolverParameter = SolverParameter{net :: !(P'.Maybe P'.Utf8), net_param :: !(P'.Maybe Caffe.NetParameter),
+                                       train_net :: !(P'.Maybe P'.Utf8), test_net :: !(P'.Seq P'.Utf8),
+                                       train_net_param :: !(P'.Maybe Caffe.NetParameter),
+                                       test_net_param :: !(P'.Seq Caffe.NetParameter), train_state :: !(P'.Maybe Caffe.NetState),
+                                       test_state :: !(P'.Seq Caffe.NetState), test_iter :: !(P'.Seq P'.Int32),
+                                       test_interval :: !(P'.Maybe P'.Int32), test_compute_loss :: !(P'.Maybe P'.Bool),
+                                       test_initialization :: !(P'.Maybe P'.Bool), base_lr :: !(P'.Maybe P'.Float),
+                                       display :: !(P'.Maybe P'.Int32), average_loss :: !(P'.Maybe P'.Int32),
+                                       max_iter :: !(P'.Maybe P'.Int32), lr_policy :: !(P'.Maybe P'.Utf8),
+                                       gamma :: !(P'.Maybe P'.Float), power :: !(P'.Maybe P'.Float),
+                                       momentum :: !(P'.Maybe P'.Float), weight_decay :: !(P'.Maybe P'.Float),
+                                       regularization_type :: !(P'.Maybe P'.Utf8), stepsize :: !(P'.Maybe P'.Int32),
+                                       stepvalue :: !(P'.Seq P'.Int32), snapshot :: !(P'.Maybe P'.Int32),
+                                       snapshot_prefix :: !(P'.Maybe P'.Utf8), snapshot_diff :: !(P'.Maybe P'.Bool),
+                                       solver_mode :: !(P'.Maybe Caffe.SolverParameter.SolverMode),
+                                       device_id :: !(P'.Maybe P'.Int32), random_seed :: !(P'.Maybe P'.Int64),
+                                       solver_type :: !(P'.Maybe Caffe.SolverParameter.SolverType), delta :: !(P'.Maybe P'.Float),
+                                       debug_info :: !(P'.Maybe P'.Bool), snapshot_after_train :: !(P'.Maybe P'.Bool)}
+                     deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''SolverParameter
+
+ 
+instance P'.Mergeable SolverParameter where
+  mergeAppend
+   (SolverParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23 x'24
+     x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34)
+   (SolverParameter y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9 y'10 y'11 y'12 y'13 y'14 y'15 y'16 y'17 y'18 y'19 y'20 y'21 y'22 y'23 y'24
+     y'25 y'26 y'27 y'28 y'29 y'30 y'31 y'32 y'33 y'34)
+   = SolverParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+      (P'.mergeAppend x'8 y'8)
+      (P'.mergeAppend x'9 y'9)
+      (P'.mergeAppend x'10 y'10)
+      (P'.mergeAppend x'11 y'11)
+      (P'.mergeAppend x'12 y'12)
+      (P'.mergeAppend x'13 y'13)
+      (P'.mergeAppend x'14 y'14)
+      (P'.mergeAppend x'15 y'15)
+      (P'.mergeAppend x'16 y'16)
+      (P'.mergeAppend x'17 y'17)
+      (P'.mergeAppend x'18 y'18)
+      (P'.mergeAppend x'19 y'19)
+      (P'.mergeAppend x'20 y'20)
+      (P'.mergeAppend x'21 y'21)
+      (P'.mergeAppend x'22 y'22)
+      (P'.mergeAppend x'23 y'23)
+      (P'.mergeAppend x'24 y'24)
+      (P'.mergeAppend x'25 y'25)
+      (P'.mergeAppend x'26 y'26)
+      (P'.mergeAppend x'27 y'27)
+      (P'.mergeAppend x'28 y'28)
+      (P'.mergeAppend x'29 y'29)
+      (P'.mergeAppend x'30 y'30)
+      (P'.mergeAppend x'31 y'31)
+      (P'.mergeAppend x'32 y'32)
+      (P'.mergeAppend x'33 y'33)
+      (P'.mergeAppend x'34 y'34)
+ 
+instance P'.Default SolverParameter where
+  defaultValue
+   = SolverParameter P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      (Prelude'.Just 0)
+      (Prelude'.Just Prelude'.False)
+      (Prelude'.Just Prelude'.True)
+      P'.defaultValue
+      P'.defaultValue
+      (Prelude'.Just 1)
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      (Prelude'.Just (P'.Utf8 (P'.pack "L2")))
+      P'.defaultValue
+      P'.defaultValue
+      (Prelude'.Just 0)
+      P'.defaultValue
+      (Prelude'.Just Prelude'.False)
+      (Prelude'.Just (Prelude'.read "GPU"))
+      (Prelude'.Just 0)
+      (Prelude'.Just (-1))
+      (Prelude'.Just (Prelude'.read "SGD"))
+      (Prelude'.Just 9.99999993922529e-9)
+      (Prelude'.Just Prelude'.False)
+      (Prelude'.Just Prelude'.True)
+ 
+instance P'.Wire SolverParameter where
+  wireSize ft'
+   self'@(SolverParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23
+           x'24 x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 2 9 x'1 + P'.wireSizeOpt 2 11 x'2 + P'.wireSizeOpt 1 9 x'3 + P'.wireSizeRep 1 9 x'4 +
+             P'.wireSizeOpt 2 11 x'5
+             + P'.wireSizeRep 2 11 x'6
+             + P'.wireSizeOpt 2 11 x'7
+             + P'.wireSizeRep 2 11 x'8
+             + P'.wireSizeRep 1 5 x'9
+             + P'.wireSizeOpt 1 5 x'10
+             + P'.wireSizeOpt 2 8 x'11
+             + P'.wireSizeOpt 2 8 x'12
+             + P'.wireSizeOpt 1 2 x'13
+             + P'.wireSizeOpt 1 5 x'14
+             + P'.wireSizeOpt 2 5 x'15
+             + P'.wireSizeOpt 1 5 x'16
+             + P'.wireSizeOpt 1 9 x'17
+             + P'.wireSizeOpt 1 2 x'18
+             + P'.wireSizeOpt 1 2 x'19
+             + P'.wireSizeOpt 1 2 x'20
+             + P'.wireSizeOpt 1 2 x'21
+             + P'.wireSizeOpt 2 9 x'22
+             + P'.wireSizeOpt 1 5 x'23
+             + P'.wireSizeRep 2 5 x'24
+             + P'.wireSizeOpt 1 5 x'25
+             + P'.wireSizeOpt 1 9 x'26
+             + P'.wireSizeOpt 2 8 x'27
+             + P'.wireSizeOpt 2 14 x'28
+             + P'.wireSizeOpt 2 5 x'29
+             + P'.wireSizeOpt 2 3 x'30
+             + P'.wireSizeOpt 2 14 x'31
+             + P'.wireSizeOpt 2 2 x'32
+             + P'.wireSizeOpt 2 8 x'33
+             + P'.wireSizeOpt 2 8 x'34)
+  wirePut ft'
+   self'@(SolverParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23
+           x'24 x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'3
+             P'.wirePutRep 18 9 x'4
+             P'.wirePutRep 24 5 x'9
+             P'.wirePutOpt 32 5 x'10
+             P'.wirePutOpt 45 2 x'13
+             P'.wirePutOpt 48 5 x'14
+             P'.wirePutOpt 56 5 x'16
+             P'.wirePutOpt 66 9 x'17
+             P'.wirePutOpt 77 2 x'18
+             P'.wirePutOpt 85 2 x'19
+             P'.wirePutOpt 93 2 x'20
+             P'.wirePutOpt 101 2 x'21
+             P'.wirePutOpt 104 5 x'23
+             P'.wirePutOpt 112 5 x'25
+             P'.wirePutOpt 122 9 x'26
+             P'.wirePutOpt 128 8 x'27
+             P'.wirePutOpt 136 14 x'28
+             P'.wirePutOpt 144 5 x'29
+             P'.wirePutOpt 152 8 x'11
+             P'.wirePutOpt 160 3 x'30
+             P'.wirePutOpt 170 11 x'5
+             P'.wirePutRep 178 11 x'6
+             P'.wirePutOpt 184 8 x'33
+             P'.wirePutOpt 194 9 x'1
+             P'.wirePutOpt 202 11 x'2
+             P'.wirePutOpt 210 11 x'7
+             P'.wirePutRep 218 11 x'8
+             P'.wirePutOpt 224 8 x'34
+             P'.wirePutOpt 234 9 x'22
+             P'.wirePutOpt 240 14 x'31
+             P'.wirePutOpt 253 2 x'32
+             P'.wirePutOpt 256 8 x'12
+             P'.wirePutOpt 264 5 x'15
+             P'.wirePutRep 272 5 x'24
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             194 -> Prelude'.fmap (\ !new'Field -> old'Self{net = Prelude'.Just new'Field}) (P'.wireGet 9)
+             202 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{net_param = P'.mergeAppend (net_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{train_net = Prelude'.Just new'Field}) (P'.wireGet 9)
+             18 -> Prelude'.fmap (\ !new'Field -> old'Self{test_net = P'.append (test_net old'Self) new'Field}) (P'.wireGet 9)
+             170 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{train_net_param = P'.mergeAppend (train_net_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             178 -> Prelude'.fmap (\ !new'Field -> old'Self{test_net_param = P'.append (test_net_param old'Self) new'Field})
+                     (P'.wireGet 11)
+             210 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{train_state = P'.mergeAppend (train_state old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             218 -> Prelude'.fmap (\ !new'Field -> old'Self{test_state = P'.append (test_state old'Self) new'Field}) (P'.wireGet 11)
+             24 -> Prelude'.fmap (\ !new'Field -> old'Self{test_iter = P'.append (test_iter old'Self) new'Field}) (P'.wireGet 5)
+             26 -> Prelude'.fmap (\ !new'Field -> old'Self{test_iter = P'.mergeAppend (test_iter old'Self) new'Field})
+                    (P'.wireGetPacked 5)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{test_interval = Prelude'.Just new'Field}) (P'.wireGet 5)
+             152 -> Prelude'.fmap (\ !new'Field -> old'Self{test_compute_loss = Prelude'.Just new'Field}) (P'.wireGet 8)
+             256 -> Prelude'.fmap (\ !new'Field -> old'Self{test_initialization = Prelude'.Just new'Field}) (P'.wireGet 8)
+             45 -> Prelude'.fmap (\ !new'Field -> old'Self{base_lr = Prelude'.Just new'Field}) (P'.wireGet 2)
+             48 -> Prelude'.fmap (\ !new'Field -> old'Self{display = Prelude'.Just new'Field}) (P'.wireGet 5)
+             264 -> Prelude'.fmap (\ !new'Field -> old'Self{average_loss = Prelude'.Just new'Field}) (P'.wireGet 5)
+             56 -> Prelude'.fmap (\ !new'Field -> old'Self{max_iter = Prelude'.Just new'Field}) (P'.wireGet 5)
+             66 -> Prelude'.fmap (\ !new'Field -> old'Self{lr_policy = Prelude'.Just new'Field}) (P'.wireGet 9)
+             77 -> Prelude'.fmap (\ !new'Field -> old'Self{gamma = Prelude'.Just new'Field}) (P'.wireGet 2)
+             85 -> Prelude'.fmap (\ !new'Field -> old'Self{power = Prelude'.Just new'Field}) (P'.wireGet 2)
+             93 -> Prelude'.fmap (\ !new'Field -> old'Self{momentum = Prelude'.Just new'Field}) (P'.wireGet 2)
+             101 -> Prelude'.fmap (\ !new'Field -> old'Self{weight_decay = Prelude'.Just new'Field}) (P'.wireGet 2)
+             234 -> Prelude'.fmap (\ !new'Field -> old'Self{regularization_type = Prelude'.Just new'Field}) (P'.wireGet 9)
+             104 -> Prelude'.fmap (\ !new'Field -> old'Self{stepsize = Prelude'.Just new'Field}) (P'.wireGet 5)
+             272 -> Prelude'.fmap (\ !new'Field -> old'Self{stepvalue = P'.append (stepvalue old'Self) new'Field}) (P'.wireGet 5)
+             274 -> Prelude'.fmap (\ !new'Field -> old'Self{stepvalue = P'.mergeAppend (stepvalue old'Self) new'Field})
+                     (P'.wireGetPacked 5)
+             112 -> Prelude'.fmap (\ !new'Field -> old'Self{snapshot = Prelude'.Just new'Field}) (P'.wireGet 5)
+             122 -> Prelude'.fmap (\ !new'Field -> old'Self{snapshot_prefix = Prelude'.Just new'Field}) (P'.wireGet 9)
+             128 -> Prelude'.fmap (\ !new'Field -> old'Self{snapshot_diff = Prelude'.Just new'Field}) (P'.wireGet 8)
+             136 -> Prelude'.fmap (\ !new'Field -> old'Self{solver_mode = Prelude'.Just new'Field}) (P'.wireGet 14)
+             144 -> Prelude'.fmap (\ !new'Field -> old'Self{device_id = Prelude'.Just new'Field}) (P'.wireGet 5)
+             160 -> Prelude'.fmap (\ !new'Field -> old'Self{random_seed = Prelude'.Just new'Field}) (P'.wireGet 3)
+             240 -> Prelude'.fmap (\ !new'Field -> old'Self{solver_type = Prelude'.Just new'Field}) (P'.wireGet 14)
+             253 -> Prelude'.fmap (\ !new'Field -> old'Self{delta = Prelude'.Just new'Field}) (P'.wireGet 2)
+             184 -> Prelude'.fmap (\ !new'Field -> old'Self{debug_info = Prelude'.Just new'Field}) (P'.wireGet 8)
+             224 -> Prelude'.fmap (\ !new'Field -> old'Self{snapshot_after_train = Prelude'.Just new'Field}) (P'.wireGet 8)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> SolverParameter) SolverParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB SolverParameter
+ 
+instance P'.ReflectDescriptor SolverParameter where
+  getMessageInfo _
+   = P'.GetMessageInfo (P'.fromDistinctAscList [])
+      (P'.fromDistinctAscList
+        [10, 18, 24, 26, 32, 45, 48, 56, 66, 77, 85, 93, 101, 104, 112, 122, 128, 136, 144, 152, 160, 170, 178, 184, 194, 202, 210,
+         218, 224, 234, 240, 253, 256, 264, 272, 274])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.SolverParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SolverParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"SolverParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.net\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"net\"}, fieldNumber = FieldId {getFieldId = 24}, wireTag = WireTag {getWireTag = 194}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.net_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"net_param\"}, fieldNumber = FieldId {getFieldId = 25}, wireTag = WireTag {getWireTag = 202}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.train_net\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"train_net\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_net\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_net\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.train_net_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"train_net_param\"}, fieldNumber = FieldId {getFieldId = 21}, wireTag = WireTag {getWireTag = 170}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_net_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_net_param\"}, fieldNumber = FieldId {getFieldId = 22}, wireTag = WireTag {getWireTag = 178}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.train_state\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"train_state\"}, fieldNumber = FieldId {getFieldId = 26}, wireTag = WireTag {getWireTag = 210}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetState\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetState\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_state\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_state\"}, fieldNumber = FieldId {getFieldId = 27}, wireTag = WireTag {getWireTag = 218}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetState\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetState\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_iter\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_iter\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Just (WireTag {getWireTag = 24},WireTag {getWireTag = 26}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_interval\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_interval\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_compute_loss\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_compute_loss\"}, fieldNumber = FieldId {getFieldId = 19}, wireTag = WireTag {getWireTag = 152}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.test_initialization\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"test_initialization\"}, fieldNumber = FieldId {getFieldId = 32}, wireTag = WireTag {getWireTag = 256}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.base_lr\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"base_lr\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 45}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.display\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"display\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.average_loss\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"average_loss\"}, fieldNumber = FieldId {getFieldId = 33}, wireTag = WireTag {getWireTag = 264}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.max_iter\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"max_iter\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.lr_policy\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"lr_policy\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 66}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.gamma\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"gamma\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 77}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.power\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"power\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 85}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.momentum\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"momentum\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 93}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.weight_decay\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"weight_decay\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 101}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.regularization_type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"regularization_type\"}, fieldNumber = FieldId {getFieldId = 29}, wireTag = WireTag {getWireTag = 234}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"L2\", hsDefault = Just (HsDef'ByteString \"L2\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.stepsize\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"stepsize\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 104}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.stepvalue\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"stepvalue\"}, fieldNumber = FieldId {getFieldId = 34}, wireTag = WireTag {getWireTag = 272}, packedTag = Just (WireTag {getWireTag = 272},WireTag {getWireTag = 274}), wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.snapshot\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"snapshot\"}, fieldNumber = FieldId {getFieldId = 14}, wireTag = WireTag {getWireTag = 112}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.snapshot_prefix\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"snapshot_prefix\"}, fieldNumber = FieldId {getFieldId = 15}, wireTag = WireTag {getWireTag = 122}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.snapshot_diff\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"snapshot_diff\"}, fieldNumber = FieldId {getFieldId = 16}, wireTag = WireTag {getWireTag = 128}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.solver_mode\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"solver_mode\"}, fieldNumber = FieldId {getFieldId = 17}, wireTag = WireTag {getWireTag = 136}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SolverParameter.SolverMode\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SolverParameter\"], baseName = MName \"SolverMode\"}), hsRawDefault = Just \"GPU\", hsDefault = Just (HsDef'Enum \"GPU\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.device_id\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"device_id\"}, fieldNumber = FieldId {getFieldId = 18}, wireTag = WireTag {getWireTag = 144}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.random_seed\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"random_seed\"}, fieldNumber = FieldId {getFieldId = 20}, wireTag = WireTag {getWireTag = 160}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 3}, typeName = Nothing, hsRawDefault = Just \"-1\", hsDefault = Just (HsDef'Integer (-1))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.solver_type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"solver_type\"}, fieldNumber = FieldId {getFieldId = 30}, wireTag = WireTag {getWireTag = 240}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SolverParameter.SolverType\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"SolverParameter\"], baseName = MName \"SolverType\"}), hsRawDefault = Just \"SGD\", hsDefault = Just (HsDef'Enum \"SGD\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.delta\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"delta\"}, fieldNumber = FieldId {getFieldId = 31}, wireTag = WireTag {getWireTag = 253}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0e-8\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (11258999 % 1125899906842624)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.debug_info\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"debug_info\"}, fieldNumber = FieldId {getFieldId = 23}, wireTag = WireTag {getWireTag = 184}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverParameter.snapshot_after_train\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverParameter\"], baseName' = FName \"snapshot_after_train\"}, fieldNumber = FieldId {getFieldId = 28}, wireTag = WireTag {getWireTag = 224}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/SolverParameter/SolverMode.hs b/Gen/Caffe/SolverParameter/SolverMode.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/SolverParameter/SolverMode.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.SolverParameter.SolverMode  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data SolverMode = CPU
+                | GPU
+                deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''SolverMode
+
+ 
+instance P'.Mergeable SolverMode
+ 
+instance Prelude'.Bounded SolverMode where
+  minBound = CPU
+  maxBound = GPU
+ 
+instance P'.Default SolverMode where
+  defaultValue = CPU
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe SolverMode
+toMaybe'Enum 0 = Prelude'.Just CPU
+toMaybe'Enum 1 = Prelude'.Just GPU
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum SolverMode where
+  fromEnum CPU = 0
+  fromEnum GPU = 1
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.SolverParameter.SolverMode") .
+      toMaybe'Enum
+  succ CPU = GPU
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.SolverParameter.SolverMode"
+  pred GPU = CPU
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.SolverParameter.SolverMode"
+ 
+instance P'.Wire SolverMode where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB SolverMode
+ 
+instance P'.MessageAPI msg' (msg' -> SolverMode) SolverMode where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum SolverMode where
+  reflectEnum = [(0, "CPU", CPU), (1, "GPU", GPU)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.SolverParameter.SolverMode") ["Gen"] ["Caffe", "SolverParameter"] "SolverMode")
+      ["Gen", "Caffe", "SolverParameter", "SolverMode.hs"]
+      [(0, "CPU"), (1, "GPU")]
diff --git a/Gen/Caffe/SolverParameter/SolverType.hs b/Gen/Caffe/SolverParameter/SolverType.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/SolverParameter/SolverType.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.SolverParameter.SolverType  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data SolverType = SGD
+                | NESTEROV
+                | ADAGRAD
+                deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''SolverType
+
+ 
+instance P'.Mergeable SolverType
+ 
+instance Prelude'.Bounded SolverType where
+  minBound = SGD
+  maxBound = ADAGRAD
+ 
+instance P'.Default SolverType where
+  defaultValue = SGD
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe SolverType
+toMaybe'Enum 0 = Prelude'.Just SGD
+toMaybe'Enum 1 = Prelude'.Just NESTEROV
+toMaybe'Enum 2 = Prelude'.Just ADAGRAD
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum SolverType where
+  fromEnum SGD = 0
+  fromEnum NESTEROV = 1
+  fromEnum ADAGRAD = 2
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.SolverParameter.SolverType") .
+      toMaybe'Enum
+  succ SGD = NESTEROV
+  succ NESTEROV = ADAGRAD
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.SolverParameter.SolverType"
+  pred NESTEROV = SGD
+  pred ADAGRAD = NESTEROV
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.SolverParameter.SolverType"
+ 
+instance P'.Wire SolverType where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB SolverType
+ 
+instance P'.MessageAPI msg' (msg' -> SolverType) SolverType where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum SolverType where
+  reflectEnum = [(0, "SGD", SGD), (1, "NESTEROV", NESTEROV), (2, "ADAGRAD", ADAGRAD)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.SolverParameter.SolverType") ["Gen"] ["Caffe", "SolverParameter"] "SolverType")
+      ["Gen", "Caffe", "SolverParameter", "SolverType.hs"]
+      [(0, "SGD"), (1, "NESTEROV"), (2, "ADAGRAD")]
diff --git a/Gen/Caffe/SolverState.hs b/Gen/Caffe/SolverState.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/SolverState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.SolverState  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.BlobProto as Caffe (BlobProto)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data SolverState = SolverState{iter :: !(P'.Maybe P'.Int32), learned_net :: !(P'.Maybe P'.Utf8),
+                               history :: !(P'.Seq Caffe.BlobProto), current_step :: !(P'.Maybe P'.Int32)}
+                 deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''SolverState
+
+ 
+instance P'.Mergeable SolverState where
+  mergeAppend (SolverState x'1 x'2 x'3 x'4) (SolverState y'1 y'2 y'3 y'4)
+   = SolverState (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+ 
+instance P'.Default SolverState where
+  defaultValue = SolverState P'.defaultValue P'.defaultValue P'.defaultValue (Prelude'.Just 0)
+ 
+instance P'.Wire SolverState where
+  wireSize ft' self'@(SolverState x'1 x'2 x'3 x'4)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 5 x'1 + P'.wireSizeOpt 1 9 x'2 + P'.wireSizeRep 1 11 x'3 + P'.wireSizeOpt 1 5 x'4)
+  wirePut ft' self'@(SolverState x'1 x'2 x'3 x'4)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 5 x'1
+             P'.wirePutOpt 18 9 x'2
+             P'.wirePutRep 26 11 x'3
+             P'.wirePutOpt 32 5 x'4
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{iter = Prelude'.Just new'Field}) (P'.wireGet 5)
+             18 -> Prelude'.fmap (\ !new'Field -> old'Self{learned_net = Prelude'.Just new'Field}) (P'.wireGet 9)
+             26 -> Prelude'.fmap (\ !new'Field -> old'Self{history = P'.append (history old'Self) new'Field}) (P'.wireGet 11)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{current_step = Prelude'.Just new'Field}) (P'.wireGet 5)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> SolverState) SolverState where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB SolverState
+ 
+instance P'.ReflectDescriptor SolverState where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8, 18, 26, 32])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.SolverState\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SolverState\"}, descFilePath = [\"Gen\",\"Caffe\",\"SolverState.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverState.iter\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverState\"], baseName' = FName \"iter\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverState.learned_net\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverState\"], baseName' = FName \"learned_net\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverState.history\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverState\"], baseName' = FName \"history\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.SolverState.current_step\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"SolverState\"], baseName' = FName \"current_step\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/TanHParameter.hs b/Gen/Caffe/TanHParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/TanHParameter.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.TanHParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.TanHParameter.Engine as Caffe.TanHParameter (Engine)
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data TanHParameter = TanHParameter{engine :: !(P'.Maybe Caffe.TanHParameter.Engine)}
+                   deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''TanHParameter
+
+ 
+instance P'.Mergeable TanHParameter where
+  mergeAppend (TanHParameter x'1) (TanHParameter y'1) = TanHParameter (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default TanHParameter where
+  defaultValue = TanHParameter (Prelude'.Just (Prelude'.read "DEFAULT"))
+ 
+instance P'.Wire TanHParameter where
+  wireSize ft' self'@(TanHParameter x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 14 x'1)
+  wirePut ft' self'@(TanHParameter x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 8 14 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             8 -> Prelude'.fmap (\ !new'Field -> old'Self{engine = Prelude'.Just new'Field}) (P'.wireGet 14)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> TanHParameter) TanHParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB TanHParameter
+ 
+instance P'.ReflectDescriptor TanHParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [8])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.TanHParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TanHParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"TanHParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TanHParameter.engine\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TanHParameter\"], baseName' = FName \"engine\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 8}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.TanHParameter.Engine\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"TanHParameter\"], baseName = MName \"Engine\"}), hsRawDefault = Just \"DEFAULT\", hsDefault = Just (HsDef'Enum \"DEFAULT\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/TanHParameter/Engine.hs b/Gen/Caffe/TanHParameter/Engine.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/TanHParameter/Engine.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.TanHParameter.Engine  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data Engine = DEFAULT
+            | CAFFE
+            | CUDNN
+            deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''Engine
+
+ 
+instance P'.Mergeable Engine
+ 
+instance Prelude'.Bounded Engine where
+  minBound = DEFAULT
+  maxBound = CUDNN
+ 
+instance P'.Default Engine where
+  defaultValue = DEFAULT
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe Engine
+toMaybe'Enum 0 = Prelude'.Just DEFAULT
+toMaybe'Enum 1 = Prelude'.Just CAFFE
+toMaybe'Enum 2 = Prelude'.Just CUDNN
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum Engine where
+  fromEnum DEFAULT = 0
+  fromEnum CAFFE = 1
+  fromEnum CUDNN = 2
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.TanHParameter.Engine") . toMaybe'Enum
+  succ DEFAULT = CAFFE
+  succ CAFFE = CUDNN
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.TanHParameter.Engine"
+  pred CAFFE = DEFAULT
+  pred CUDNN = CAFFE
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.TanHParameter.Engine"
+ 
+instance P'.Wire Engine where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB Engine
+ 
+instance P'.MessageAPI msg' (msg' -> Engine) Engine where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum Engine where
+  reflectEnum = [(0, "DEFAULT", DEFAULT), (1, "CAFFE", CAFFE), (2, "CUDNN", CUDNN)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.TanHParameter.Engine") ["Gen"] ["Caffe", "TanHParameter"] "Engine")
+      ["Gen", "Caffe", "TanHParameter", "Engine.hs"]
+      [(0, "DEFAULT"), (1, "CAFFE"), (2, "CUDNN")]
diff --git a/Gen/Caffe/ThresholdParameter.hs b/Gen/Caffe/ThresholdParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/ThresholdParameter.hs
@@ -0,0 +1,63 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.ThresholdParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data ThresholdParameter = ThresholdParameter{threshold :: !(P'.Maybe P'.Float)}
+                        deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''ThresholdParameter
+
+ 
+instance P'.Mergeable ThresholdParameter where
+  mergeAppend (ThresholdParameter x'1) (ThresholdParameter y'1) = ThresholdParameter (P'.mergeAppend x'1 y'1)
+ 
+instance P'.Default ThresholdParameter where
+  defaultValue = ThresholdParameter (Prelude'.Just 0.0)
+ 
+instance P'.Wire ThresholdParameter where
+  wireSize ft' self'@(ThresholdParameter x'1)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size = (P'.wireSizeOpt 1 2 x'1)
+  wirePut ft' self'@(ThresholdParameter x'1)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 13 2 x'1
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             13 -> Prelude'.fmap (\ !new'Field -> old'Self{threshold = Prelude'.Just new'Field}) (P'.wireGet 2)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> ThresholdParameter) ThresholdParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB ThresholdParameter
+ 
+instance P'.ReflectDescriptor ThresholdParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [13])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.ThresholdParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ThresholdParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"ThresholdParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.ThresholdParameter.threshold\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"ThresholdParameter\"], baseName' = FName \"threshold\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (0 % 1)))}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/TransformationParameter.hs b/Gen/Caffe/TransformationParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/TransformationParameter.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.TransformationParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data TransformationParameter = TransformationParameter{scale :: !(P'.Maybe P'.Float), mirror :: !(P'.Maybe P'.Bool),
+                                                       crop_size :: !(P'.Maybe P'.Word32), mean_file :: !(P'.Maybe P'.Utf8),
+                                                       mean_value :: !(P'.Seq P'.Float)}
+                             deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''TransformationParameter
+
+ 
+instance P'.Mergeable TransformationParameter where
+  mergeAppend (TransformationParameter x'1 x'2 x'3 x'4 x'5) (TransformationParameter y'1 y'2 y'3 y'4 y'5)
+   = TransformationParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+ 
+instance P'.Default TransformationParameter where
+  defaultValue
+   = TransformationParameter (Prelude'.Just 1.0) (Prelude'.Just Prelude'.False) (Prelude'.Just 0) P'.defaultValue P'.defaultValue
+ 
+instance P'.Wire TransformationParameter where
+  wireSize ft' self'@(TransformationParameter x'1 x'2 x'3 x'4 x'5)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 2 x'1 + P'.wireSizeOpt 1 8 x'2 + P'.wireSizeOpt 1 13 x'3 + P'.wireSizeOpt 1 9 x'4 +
+             P'.wireSizeRep 1 2 x'5)
+  wirePut ft' self'@(TransformationParameter x'1 x'2 x'3 x'4 x'5)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 13 2 x'1
+             P'.wirePutOpt 16 8 x'2
+             P'.wirePutOpt 24 13 x'3
+             P'.wirePutOpt 34 9 x'4
+             P'.wirePutRep 45 2 x'5
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             13 -> Prelude'.fmap (\ !new'Field -> old'Self{scale = Prelude'.Just new'Field}) (P'.wireGet 2)
+             16 -> Prelude'.fmap (\ !new'Field -> old'Self{mirror = Prelude'.Just new'Field}) (P'.wireGet 8)
+             24 -> Prelude'.fmap (\ !new'Field -> old'Self{crop_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             34 -> Prelude'.fmap (\ !new'Field -> old'Self{mean_file = Prelude'.Just new'Field}) (P'.wireGet 9)
+             45 -> Prelude'.fmap (\ !new'Field -> old'Self{mean_value = P'.append (mean_value old'Self) new'Field}) (P'.wireGet 2)
+             42 -> Prelude'.fmap (\ !new'Field -> old'Self{mean_value = P'.mergeAppend (mean_value old'Self) new'Field})
+                    (P'.wireGetPacked 2)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> TransformationParameter) TransformationParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB TransformationParameter
+ 
+instance P'.ReflectDescriptor TransformationParameter where
+  getMessageInfo _ = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [13, 16, 24, 34, 42, 45])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.TransformationParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TransformationParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"TransformationParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TransformationParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TransformationParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 13}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TransformationParameter.mirror\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TransformationParameter\"], baseName' = FName \"mirror\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 16}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TransformationParameter.crop_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TransformationParameter\"], baseName' = FName \"crop_size\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TransformationParameter.mean_file\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TransformationParameter\"], baseName' = FName \"mean_file\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.TransformationParameter.mean_value\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"TransformationParameter\"], baseName' = FName \"mean_value\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 45}, packedTag = Just (WireTag {getWireTag = 45},WireTag {getWireTag = 42}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/V0LayerParameter.hs b/Gen/Caffe/V0LayerParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/V0LayerParameter.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.V0LayerParameter (V0LayerParameter(..)) where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.BlobProto as Caffe (BlobProto)
+import qualified Gen.Caffe.FillerParameter as Caffe (FillerParameter)
+import qualified Gen.Caffe.HDF5OutputParameter as Caffe (HDF5OutputParameter)
+import qualified Gen.Caffe.V0LayerParameter.PoolMethod as Caffe.V0LayerParameter (PoolMethod)
+ 
+data V0LayerParameter = V0LayerParameter{name :: !(P'.Maybe P'.Utf8), type' :: !(P'.Maybe P'.Utf8),
+                                         num_output :: !(P'.Maybe P'.Word32), biasterm :: !(P'.Maybe P'.Bool),
+                                         weight_filler :: !(P'.Maybe Caffe.FillerParameter),
+                                         bias_filler :: !(P'.Maybe Caffe.FillerParameter), pad :: !(P'.Maybe P'.Word32),
+                                         kernelsize :: !(P'.Maybe P'.Word32), group :: !(P'.Maybe P'.Word32),
+                                         stride :: !(P'.Maybe P'.Word32), pool :: !(P'.Maybe Caffe.V0LayerParameter.PoolMethod),
+                                         dropout_ratio :: !(P'.Maybe P'.Float), local_size :: !(P'.Maybe P'.Word32),
+                                         alpha :: !(P'.Maybe P'.Float), beta :: !(P'.Maybe P'.Float), k :: !(P'.Maybe P'.Float),
+                                         source :: !(P'.Maybe P'.Utf8), scale :: !(P'.Maybe P'.Float),
+                                         meanfile :: !(P'.Maybe P'.Utf8), batchsize :: !(P'.Maybe P'.Word32),
+                                         cropsize :: !(P'.Maybe P'.Word32), mirror :: !(P'.Maybe P'.Bool),
+                                         blobs :: !(P'.Seq Caffe.BlobProto), blobs_lr :: !(P'.Seq P'.Float),
+                                         weight_decay :: !(P'.Seq P'.Float), rand_skip :: !(P'.Maybe P'.Word32),
+                                         det_fg_threshold :: !(P'.Maybe P'.Float), det_bg_threshold :: !(P'.Maybe P'.Float),
+                                         det_fg_fraction :: !(P'.Maybe P'.Float), det_context_pad :: !(P'.Maybe P'.Word32),
+                                         det_crop_mode :: !(P'.Maybe P'.Utf8), new_num :: !(P'.Maybe P'.Int32),
+                                         new_channels :: !(P'.Maybe P'.Int32), new_height :: !(P'.Maybe P'.Int32),
+                                         new_width :: !(P'.Maybe P'.Int32), shuffle_images :: !(P'.Maybe P'.Bool),
+                                         concat_dim :: !(P'.Maybe P'.Word32),
+                                         hdf5_output_param :: !(P'.Maybe Caffe.HDF5OutputParameter)}
+                      deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+ 
+instance P'.Mergeable V0LayerParameter where
+  mergeAppend
+   (V0LayerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23 x'24
+     x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34 x'35 x'36 x'37 x'38)
+   (V0LayerParameter y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9 y'10 y'11 y'12 y'13 y'14 y'15 y'16 y'17 y'18 y'19 y'20 y'21 y'22 y'23 y'24
+     y'25 y'26 y'27 y'28 y'29 y'30 y'31 y'32 y'33 y'34 y'35 y'36 y'37 y'38)
+   = V0LayerParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+      (P'.mergeAppend x'8 y'8)
+      (P'.mergeAppend x'9 y'9)
+      (P'.mergeAppend x'10 y'10)
+      (P'.mergeAppend x'11 y'11)
+      (P'.mergeAppend x'12 y'12)
+      (P'.mergeAppend x'13 y'13)
+      (P'.mergeAppend x'14 y'14)
+      (P'.mergeAppend x'15 y'15)
+      (P'.mergeAppend x'16 y'16)
+      (P'.mergeAppend x'17 y'17)
+      (P'.mergeAppend x'18 y'18)
+      (P'.mergeAppend x'19 y'19)
+      (P'.mergeAppend x'20 y'20)
+      (P'.mergeAppend x'21 y'21)
+      (P'.mergeAppend x'22 y'22)
+      (P'.mergeAppend x'23 y'23)
+      (P'.mergeAppend x'24 y'24)
+      (P'.mergeAppend x'25 y'25)
+      (P'.mergeAppend x'26 y'26)
+      (P'.mergeAppend x'27 y'27)
+      (P'.mergeAppend x'28 y'28)
+      (P'.mergeAppend x'29 y'29)
+      (P'.mergeAppend x'30 y'30)
+      (P'.mergeAppend x'31 y'31)
+      (P'.mergeAppend x'32 y'32)
+      (P'.mergeAppend x'33 y'33)
+      (P'.mergeAppend x'34 y'34)
+      (P'.mergeAppend x'35 y'35)
+      (P'.mergeAppend x'36 y'36)
+      (P'.mergeAppend x'37 y'37)
+      (P'.mergeAppend x'38 y'38)
+ 
+instance P'.Default V0LayerParameter where
+  defaultValue
+   = V0LayerParameter P'.defaultValue P'.defaultValue P'.defaultValue (Prelude'.Just Prelude'.True) P'.defaultValue P'.defaultValue
+      (Prelude'.Just 0)
+      P'.defaultValue
+      (Prelude'.Just 1)
+      (Prelude'.Just 1)
+      (Prelude'.Just (Prelude'.read "MAX"))
+      (Prelude'.Just 0.5)
+      (Prelude'.Just 5)
+      (Prelude'.Just 1.0)
+      (Prelude'.Just 0.75)
+      (Prelude'.Just 1.0)
+      P'.defaultValue
+      (Prelude'.Just 1.0)
+      P'.defaultValue
+      P'.defaultValue
+      (Prelude'.Just 0)
+      (Prelude'.Just Prelude'.False)
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      (Prelude'.Just 0)
+      (Prelude'.Just 0.5)
+      (Prelude'.Just 0.5)
+      (Prelude'.Just 0.25)
+      (Prelude'.Just 0)
+      (Prelude'.Just (P'.Utf8 (P'.pack "warp")))
+      (Prelude'.Just 0)
+      (Prelude'.Just 0)
+      (Prelude'.Just 0)
+      (Prelude'.Just 0)
+      (Prelude'.Just Prelude'.False)
+      (Prelude'.Just 1)
+      P'.defaultValue
+ 
+instance P'.Wire V0LayerParameter where
+  wireSize ft'
+   self'@(V0LayerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23
+           x'24 x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34 x'35 x'36 x'37 x'38)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 9 x'1 + P'.wireSizeOpt 1 9 x'2 + P'.wireSizeOpt 1 13 x'3 + P'.wireSizeOpt 1 8 x'4 +
+             P'.wireSizeOpt 1 11 x'5
+             + P'.wireSizeOpt 1 11 x'6
+             + P'.wireSizeOpt 1 13 x'7
+             + P'.wireSizeOpt 1 13 x'8
+             + P'.wireSizeOpt 1 13 x'9
+             + P'.wireSizeOpt 1 13 x'10
+             + P'.wireSizeOpt 1 14 x'11
+             + P'.wireSizeOpt 1 2 x'12
+             + P'.wireSizeOpt 1 13 x'13
+             + P'.wireSizeOpt 1 2 x'14
+             + P'.wireSizeOpt 1 2 x'15
+             + P'.wireSizeOpt 2 2 x'16
+             + P'.wireSizeOpt 2 9 x'17
+             + P'.wireSizeOpt 2 2 x'18
+             + P'.wireSizeOpt 2 9 x'19
+             + P'.wireSizeOpt 2 13 x'20
+             + P'.wireSizeOpt 2 13 x'21
+             + P'.wireSizeOpt 2 8 x'22
+             + P'.wireSizeRep 2 11 x'23
+             + P'.wireSizeRep 2 2 x'24
+             + P'.wireSizeRep 2 2 x'25
+             + P'.wireSizeOpt 2 13 x'26
+             + P'.wireSizeOpt 2 2 x'27
+             + P'.wireSizeOpt 2 2 x'28
+             + P'.wireSizeOpt 2 2 x'29
+             + P'.wireSizeOpt 2 13 x'30
+             + P'.wireSizeOpt 2 9 x'31
+             + P'.wireSizeOpt 2 5 x'32
+             + P'.wireSizeOpt 2 5 x'33
+             + P'.wireSizeOpt 2 5 x'34
+             + P'.wireSizeOpt 2 5 x'35
+             + P'.wireSizeOpt 2 8 x'36
+             + P'.wireSizeOpt 2 13 x'37
+             + P'.wireSizeOpt 2 11 x'38)
+  wirePut ft'
+   self'@(V0LayerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23
+           x'24 x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34 x'35 x'36 x'37 x'38)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'1
+             P'.wirePutOpt 18 9 x'2
+             P'.wirePutOpt 24 13 x'3
+             P'.wirePutOpt 32 8 x'4
+             P'.wirePutOpt 42 11 x'5
+             P'.wirePutOpt 50 11 x'6
+             P'.wirePutOpt 56 13 x'7
+             P'.wirePutOpt 64 13 x'8
+             P'.wirePutOpt 72 13 x'9
+             P'.wirePutOpt 80 13 x'10
+             P'.wirePutOpt 88 14 x'11
+             P'.wirePutOpt 101 2 x'12
+             P'.wirePutOpt 104 13 x'13
+             P'.wirePutOpt 117 2 x'14
+             P'.wirePutOpt 125 2 x'15
+             P'.wirePutOpt 130 9 x'17
+             P'.wirePutOpt 141 2 x'18
+             P'.wirePutOpt 146 9 x'19
+             P'.wirePutOpt 152 13 x'20
+             P'.wirePutOpt 160 13 x'21
+             P'.wirePutOpt 168 8 x'22
+             P'.wirePutOpt 181 2 x'16
+             P'.wirePutRep 402 11 x'23
+             P'.wirePutRep 413 2 x'24
+             P'.wirePutRep 421 2 x'25
+             P'.wirePutOpt 424 13 x'26
+             P'.wirePutOpt 437 2 x'27
+             P'.wirePutOpt 445 2 x'28
+             P'.wirePutOpt 453 2 x'29
+             P'.wirePutOpt 464 13 x'30
+             P'.wirePutOpt 474 9 x'31
+             P'.wirePutOpt 480 5 x'32
+             P'.wirePutOpt 488 5 x'33
+             P'.wirePutOpt 496 5 x'34
+             P'.wirePutOpt 504 5 x'35
+             P'.wirePutOpt 512 8 x'36
+             P'.wirePutOpt 520 13 x'37
+             P'.wirePutOpt 8010 11 x'38
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{name = Prelude'.Just new'Field}) (P'.wireGet 9)
+             18 -> Prelude'.fmap (\ !new'Field -> old'Self{type' = Prelude'.Just new'Field}) (P'.wireGet 9)
+             24 -> Prelude'.fmap (\ !new'Field -> old'Self{num_output = Prelude'.Just new'Field}) (P'.wireGet 13)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{biasterm = Prelude'.Just new'Field}) (P'.wireGet 8)
+             42 -> Prelude'.fmap
+                    (\ !new'Field -> old'Self{weight_filler = P'.mergeAppend (weight_filler old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             50 -> Prelude'.fmap
+                    (\ !new'Field -> old'Self{bias_filler = P'.mergeAppend (bias_filler old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             56 -> Prelude'.fmap (\ !new'Field -> old'Self{pad = Prelude'.Just new'Field}) (P'.wireGet 13)
+             64 -> Prelude'.fmap (\ !new'Field -> old'Self{kernelsize = Prelude'.Just new'Field}) (P'.wireGet 13)
+             72 -> Prelude'.fmap (\ !new'Field -> old'Self{group = Prelude'.Just new'Field}) (P'.wireGet 13)
+             80 -> Prelude'.fmap (\ !new'Field -> old'Self{stride = Prelude'.Just new'Field}) (P'.wireGet 13)
+             88 -> Prelude'.fmap (\ !new'Field -> old'Self{pool = Prelude'.Just new'Field}) (P'.wireGet 14)
+             101 -> Prelude'.fmap (\ !new'Field -> old'Self{dropout_ratio = Prelude'.Just new'Field}) (P'.wireGet 2)
+             104 -> Prelude'.fmap (\ !new'Field -> old'Self{local_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             117 -> Prelude'.fmap (\ !new'Field -> old'Self{alpha = Prelude'.Just new'Field}) (P'.wireGet 2)
+             125 -> Prelude'.fmap (\ !new'Field -> old'Self{beta = Prelude'.Just new'Field}) (P'.wireGet 2)
+             181 -> Prelude'.fmap (\ !new'Field -> old'Self{k = Prelude'.Just new'Field}) (P'.wireGet 2)
+             130 -> Prelude'.fmap (\ !new'Field -> old'Self{source = Prelude'.Just new'Field}) (P'.wireGet 9)
+             141 -> Prelude'.fmap (\ !new'Field -> old'Self{scale = Prelude'.Just new'Field}) (P'.wireGet 2)
+             146 -> Prelude'.fmap (\ !new'Field -> old'Self{meanfile = Prelude'.Just new'Field}) (P'.wireGet 9)
+             152 -> Prelude'.fmap (\ !new'Field -> old'Self{batchsize = Prelude'.Just new'Field}) (P'.wireGet 13)
+             160 -> Prelude'.fmap (\ !new'Field -> old'Self{cropsize = Prelude'.Just new'Field}) (P'.wireGet 13)
+             168 -> Prelude'.fmap (\ !new'Field -> old'Self{mirror = Prelude'.Just new'Field}) (P'.wireGet 8)
+             402 -> Prelude'.fmap (\ !new'Field -> old'Self{blobs = P'.append (blobs old'Self) new'Field}) (P'.wireGet 11)
+             413 -> Prelude'.fmap (\ !new'Field -> old'Self{blobs_lr = P'.append (blobs_lr old'Self) new'Field}) (P'.wireGet 2)
+             410 -> Prelude'.fmap (\ !new'Field -> old'Self{blobs_lr = P'.mergeAppend (blobs_lr old'Self) new'Field})
+                     (P'.wireGetPacked 2)
+             421 -> Prelude'.fmap (\ !new'Field -> old'Self{weight_decay = P'.append (weight_decay old'Self) new'Field})
+                     (P'.wireGet 2)
+             418 -> Prelude'.fmap (\ !new'Field -> old'Self{weight_decay = P'.mergeAppend (weight_decay old'Self) new'Field})
+                     (P'.wireGetPacked 2)
+             424 -> Prelude'.fmap (\ !new'Field -> old'Self{rand_skip = Prelude'.Just new'Field}) (P'.wireGet 13)
+             437 -> Prelude'.fmap (\ !new'Field -> old'Self{det_fg_threshold = Prelude'.Just new'Field}) (P'.wireGet 2)
+             445 -> Prelude'.fmap (\ !new'Field -> old'Self{det_bg_threshold = Prelude'.Just new'Field}) (P'.wireGet 2)
+             453 -> Prelude'.fmap (\ !new'Field -> old'Self{det_fg_fraction = Prelude'.Just new'Field}) (P'.wireGet 2)
+             464 -> Prelude'.fmap (\ !new'Field -> old'Self{det_context_pad = Prelude'.Just new'Field}) (P'.wireGet 13)
+             474 -> Prelude'.fmap (\ !new'Field -> old'Self{det_crop_mode = Prelude'.Just new'Field}) (P'.wireGet 9)
+             480 -> Prelude'.fmap (\ !new'Field -> old'Self{new_num = Prelude'.Just new'Field}) (P'.wireGet 5)
+             488 -> Prelude'.fmap (\ !new'Field -> old'Self{new_channels = Prelude'.Just new'Field}) (P'.wireGet 5)
+             496 -> Prelude'.fmap (\ !new'Field -> old'Self{new_height = Prelude'.Just new'Field}) (P'.wireGet 5)
+             504 -> Prelude'.fmap (\ !new'Field -> old'Self{new_width = Prelude'.Just new'Field}) (P'.wireGet 5)
+             512 -> Prelude'.fmap (\ !new'Field -> old'Self{shuffle_images = Prelude'.Just new'Field}) (P'.wireGet 8)
+             520 -> Prelude'.fmap (\ !new'Field -> old'Self{concat_dim = Prelude'.Just new'Field}) (P'.wireGet 13)
+             8010 -> Prelude'.fmap
+                      (\ !new'Field ->
+                        old'Self{hdf5_output_param = P'.mergeAppend (hdf5_output_param old'Self) (Prelude'.Just new'Field)})
+                      (P'.wireGet 11)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> V0LayerParameter) V0LayerParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB V0LayerParameter
+ 
+instance P'.ReflectDescriptor V0LayerParameter where
+  getMessageInfo _
+   = P'.GetMessageInfo (P'.fromDistinctAscList [])
+      (P'.fromDistinctAscList
+        [10, 18, 24, 32, 42, 50, 56, 64, 72, 80, 88, 101, 104, 117, 125, 130, 141, 146, 152, 160, 168, 181, 402, 410, 413, 418, 421,
+         424, 437, 445, 453, 464, 474, 480, 488, 496, 504, 512, 520, 8010])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.V0LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"V0LayerParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"V0LayerParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"name\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"type'\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.num_output\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"num_output\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 24}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.biasterm\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"biasterm\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"true\", hsDefault = Just (HsDef'Bool True)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.weight_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"weight_filler\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 42}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.bias_filler\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"bias_filler\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 50}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.FillerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"FillerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.pad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"pad\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 56}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.kernelsize\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"kernelsize\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 64}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.group\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"group\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 72}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.stride\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"stride\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 80}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.pool\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"pool\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 88}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.V0LayerParameter.PoolMethod\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName = MName \"PoolMethod\"}), hsRawDefault = Just \"MAX\", hsDefault = Just (HsDef'Enum \"MAX\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.dropout_ratio\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"dropout_ratio\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 101}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.local_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"local_size\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 104}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"5\", hsDefault = Just (HsDef'Integer 5)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.alpha\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"alpha\"}, fieldNumber = FieldId {getFieldId = 14}, wireTag = WireTag {getWireTag = 117}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.beta\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"beta\"}, fieldNumber = FieldId {getFieldId = 15}, wireTag = WireTag {getWireTag = 125}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.75\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (3 % 4)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.k\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"k\"}, fieldNumber = FieldId {getFieldId = 22}, wireTag = WireTag {getWireTag = 181}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 16}, wireTag = WireTag {getWireTag = 130}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 17}, wireTag = WireTag {getWireTag = 141}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.meanfile\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"meanfile\"}, fieldNumber = FieldId {getFieldId = 18}, wireTag = WireTag {getWireTag = 146}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.batchsize\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"batchsize\"}, fieldNumber = FieldId {getFieldId = 19}, wireTag = WireTag {getWireTag = 152}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.cropsize\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"cropsize\"}, fieldNumber = FieldId {getFieldId = 20}, wireTag = WireTag {getWireTag = 160}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.mirror\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"mirror\"}, fieldNumber = FieldId {getFieldId = 21}, wireTag = WireTag {getWireTag = 168}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.blobs\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"blobs\"}, fieldNumber = FieldId {getFieldId = 50}, wireTag = WireTag {getWireTag = 402}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.blobs_lr\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"blobs_lr\"}, fieldNumber = FieldId {getFieldId = 51}, wireTag = WireTag {getWireTag = 413}, packedTag = Just (WireTag {getWireTag = 413},WireTag {getWireTag = 410}), wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.weight_decay\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"weight_decay\"}, fieldNumber = FieldId {getFieldId = 52}, wireTag = WireTag {getWireTag = 421}, packedTag = Just (WireTag {getWireTag = 421},WireTag {getWireTag = 418}), wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.rand_skip\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"rand_skip\"}, fieldNumber = FieldId {getFieldId = 53}, wireTag = WireTag {getWireTag = 424}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.det_fg_threshold\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"det_fg_threshold\"}, fieldNumber = FieldId {getFieldId = 54}, wireTag = WireTag {getWireTag = 437}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.det_bg_threshold\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"det_bg_threshold\"}, fieldNumber = FieldId {getFieldId = 55}, wireTag = WireTag {getWireTag = 445}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.det_fg_fraction\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"det_fg_fraction\"}, fieldNumber = FieldId {getFieldId = 56}, wireTag = WireTag {getWireTag = 453}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.25\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 4)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.det_context_pad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"det_context_pad\"}, fieldNumber = FieldId {getFieldId = 58}, wireTag = WireTag {getWireTag = 464}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.det_crop_mode\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"det_crop_mode\"}, fieldNumber = FieldId {getFieldId = 59}, wireTag = WireTag {getWireTag = 474}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"warp\", hsDefault = Just (HsDef'ByteString \"warp\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.new_num\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"new_num\"}, fieldNumber = FieldId {getFieldId = 60}, wireTag = WireTag {getWireTag = 480}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.new_channels\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"new_channels\"}, fieldNumber = FieldId {getFieldId = 61}, wireTag = WireTag {getWireTag = 488}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.new_height\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"new_height\"}, fieldNumber = FieldId {getFieldId = 62}, wireTag = WireTag {getWireTag = 496}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.new_width\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"new_width\"}, fieldNumber = FieldId {getFieldId = 63}, wireTag = WireTag {getWireTag = 504}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 5}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.shuffle_images\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"shuffle_images\"}, fieldNumber = FieldId {getFieldId = 64}, wireTag = WireTag {getWireTag = 512}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.concat_dim\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"concat_dim\"}, fieldNumber = FieldId {getFieldId = 65}, wireTag = WireTag {getWireTag = 520}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"1\", hsDefault = Just (HsDef'Integer 1)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V0LayerParameter.hdf5_output_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V0LayerParameter\"], baseName' = FName \"hdf5_output_param\"}, fieldNumber = FieldId {getFieldId = 1001}, wireTag = WireTag {getWireTag = 8010}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HDF5OutputParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5OutputParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/V0LayerParameter/PoolMethod.hs b/Gen/Caffe/V0LayerParameter/PoolMethod.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/V0LayerParameter/PoolMethod.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.V0LayerParameter.PoolMethod  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data PoolMethod = MAX
+                | AVE
+                | STOCHASTIC
+                deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''PoolMethod
+
+ 
+instance P'.Mergeable PoolMethod
+ 
+instance Prelude'.Bounded PoolMethod where
+  minBound = MAX
+  maxBound = STOCHASTIC
+ 
+instance P'.Default PoolMethod where
+  defaultValue = MAX
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe PoolMethod
+toMaybe'Enum 0 = Prelude'.Just MAX
+toMaybe'Enum 1 = Prelude'.Just AVE
+toMaybe'Enum 2 = Prelude'.Just STOCHASTIC
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum PoolMethod where
+  fromEnum MAX = 0
+  fromEnum AVE = 1
+  fromEnum STOCHASTIC = 2
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.V0LayerParameter.PoolMethod") .
+      toMaybe'Enum
+  succ MAX = AVE
+  succ AVE = STOCHASTIC
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.V0LayerParameter.PoolMethod"
+  pred AVE = MAX
+  pred STOCHASTIC = AVE
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.V0LayerParameter.PoolMethod"
+ 
+instance P'.Wire PoolMethod where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB PoolMethod
+ 
+instance P'.MessageAPI msg' (msg' -> PoolMethod) PoolMethod where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum PoolMethod where
+  reflectEnum = [(0, "MAX", MAX), (1, "AVE", AVE), (2, "STOCHASTIC", STOCHASTIC)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.V0LayerParameter.PoolMethod") ["Gen"] ["Caffe", "V0LayerParameter"] "PoolMethod")
+      ["Gen", "Caffe", "V0LayerParameter", "PoolMethod.hs"]
+      [(0, "MAX"), (1, "AVE"), (2, "STOCHASTIC")]
diff --git a/Gen/Caffe/V1LayerParameter.hs b/Gen/Caffe/V1LayerParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/V1LayerParameter.hs
@@ -0,0 +1,427 @@
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.V1LayerParameter (V1LayerParameter(..)) where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+import qualified Gen.Caffe.AccuracyParameter as Caffe (AccuracyParameter)
+import qualified Gen.Caffe.ArgMaxParameter as Caffe (ArgMaxParameter)
+import qualified Gen.Caffe.BlobProto as Caffe (BlobProto)
+import qualified Gen.Caffe.ConcatParameter as Caffe (ConcatParameter)
+import qualified Gen.Caffe.ContrastiveLossParameter as Caffe (ContrastiveLossParameter)
+import qualified Gen.Caffe.ConvolutionParameter as Caffe (ConvolutionParameter)
+import qualified Gen.Caffe.DataParameter as Caffe (DataParameter)
+import qualified Gen.Caffe.DropoutParameter as Caffe (DropoutParameter)
+import qualified Gen.Caffe.DummyDataParameter as Caffe (DummyDataParameter)
+import qualified Gen.Caffe.EltwiseParameter as Caffe (EltwiseParameter)
+import qualified Gen.Caffe.ExpParameter as Caffe (ExpParameter)
+import qualified Gen.Caffe.HDF5DataParameter as Caffe (HDF5DataParameter)
+import qualified Gen.Caffe.HDF5OutputParameter as Caffe (HDF5OutputParameter)
+import qualified Gen.Caffe.HingeLossParameter as Caffe (HingeLossParameter)
+import qualified Gen.Caffe.ImageDataParameter as Caffe (ImageDataParameter)
+import qualified Gen.Caffe.InfogainLossParameter as Caffe (InfogainLossParameter)
+import qualified Gen.Caffe.InnerProductParameter as Caffe (InnerProductParameter)
+import qualified Gen.Caffe.LRNParameter as Caffe (LRNParameter)
+import qualified Gen.Caffe.LossParameter as Caffe (LossParameter)
+import qualified Gen.Caffe.MVNParameter as Caffe (MVNParameter)
+import qualified Gen.Caffe.MemoryDataParameter as Caffe (MemoryDataParameter)
+import qualified Gen.Caffe.NetStateRule as Caffe (NetStateRule)
+import qualified Gen.Caffe.PoolingParameter as Caffe (PoolingParameter)
+import qualified Gen.Caffe.PowerParameter as Caffe (PowerParameter)
+import qualified Gen.Caffe.ReLUParameter as Caffe (ReLUParameter)
+import qualified Gen.Caffe.SigmoidParameter as Caffe (SigmoidParameter)
+import qualified Gen.Caffe.SliceParameter as Caffe (SliceParameter)
+import qualified Gen.Caffe.SoftmaxParameter as Caffe (SoftmaxParameter)
+import qualified Gen.Caffe.TanHParameter as Caffe (TanHParameter)
+import qualified Gen.Caffe.ThresholdParameter as Caffe (ThresholdParameter)
+import qualified Gen.Caffe.TransformationParameter as Caffe (TransformationParameter)
+import qualified Gen.Caffe.V0LayerParameter as Caffe (V0LayerParameter)
+import qualified Gen.Caffe.V1LayerParameter.DimCheckMode as Caffe.V1LayerParameter (DimCheckMode)
+import qualified Gen.Caffe.V1LayerParameter.LayerType as Caffe.V1LayerParameter (LayerType)
+import qualified Gen.Caffe.WindowDataParameter as Caffe (WindowDataParameter)
+ 
+data V1LayerParameter = V1LayerParameter{bottom :: !(P'.Seq P'.Utf8), top :: !(P'.Seq P'.Utf8), name :: !(P'.Maybe P'.Utf8),
+                                         include :: !(P'.Seq Caffe.NetStateRule), exclude :: !(P'.Seq Caffe.NetStateRule),
+                                         type' :: !(P'.Maybe Caffe.V1LayerParameter.LayerType), blobs :: !(P'.Seq Caffe.BlobProto),
+                                         param :: !(P'.Seq P'.Utf8),
+                                         blob_share_mode :: !(P'.Seq Caffe.V1LayerParameter.DimCheckMode),
+                                         blobs_lr :: !(P'.Seq P'.Float), weight_decay :: !(P'.Seq P'.Float),
+                                         loss_weight :: !(P'.Seq P'.Float), accuracy_param :: !(P'.Maybe Caffe.AccuracyParameter),
+                                         argmax_param :: !(P'.Maybe Caffe.ArgMaxParameter),
+                                         concat_param :: !(P'.Maybe Caffe.ConcatParameter),
+                                         contrastive_loss_param :: !(P'.Maybe Caffe.ContrastiveLossParameter),
+                                         convolution_param :: !(P'.Maybe Caffe.ConvolutionParameter),
+                                         data_param :: !(P'.Maybe Caffe.DataParameter),
+                                         dropout_param :: !(P'.Maybe Caffe.DropoutParameter),
+                                         dummy_data_param :: !(P'.Maybe Caffe.DummyDataParameter),
+                                         eltwise_param :: !(P'.Maybe Caffe.EltwiseParameter),
+                                         exp_param :: !(P'.Maybe Caffe.ExpParameter),
+                                         hdf5_data_param :: !(P'.Maybe Caffe.HDF5DataParameter),
+                                         hdf5_output_param :: !(P'.Maybe Caffe.HDF5OutputParameter),
+                                         hinge_loss_param :: !(P'.Maybe Caffe.HingeLossParameter),
+                                         image_data_param :: !(P'.Maybe Caffe.ImageDataParameter),
+                                         infogain_loss_param :: !(P'.Maybe Caffe.InfogainLossParameter),
+                                         inner_product_param :: !(P'.Maybe Caffe.InnerProductParameter),
+                                         lrn_param :: !(P'.Maybe Caffe.LRNParameter),
+                                         memory_data_param :: !(P'.Maybe Caffe.MemoryDataParameter),
+                                         mvn_param :: !(P'.Maybe Caffe.MVNParameter),
+                                         pooling_param :: !(P'.Maybe Caffe.PoolingParameter),
+                                         power_param :: !(P'.Maybe Caffe.PowerParameter),
+                                         relu_param :: !(P'.Maybe Caffe.ReLUParameter),
+                                         sigmoid_param :: !(P'.Maybe Caffe.SigmoidParameter),
+                                         softmax_param :: !(P'.Maybe Caffe.SoftmaxParameter),
+                                         slice_param :: !(P'.Maybe Caffe.SliceParameter),
+                                         tanh_param :: !(P'.Maybe Caffe.TanHParameter),
+                                         threshold_param :: !(P'.Maybe Caffe.ThresholdParameter),
+                                         window_data_param :: !(P'.Maybe Caffe.WindowDataParameter),
+                                         transform_param :: !(P'.Maybe Caffe.TransformationParameter),
+                                         loss_param :: !(P'.Maybe Caffe.LossParameter), layer :: !(P'.Maybe Caffe.V0LayerParameter)}
+                      deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+ 
+instance P'.Mergeable V1LayerParameter where
+  mergeAppend
+   (V1LayerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23 x'24
+     x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34 x'35 x'36 x'37 x'38 x'39 x'40 x'41 x'42 x'43)
+   (V1LayerParameter y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9 y'10 y'11 y'12 y'13 y'14 y'15 y'16 y'17 y'18 y'19 y'20 y'21 y'22 y'23 y'24
+     y'25 y'26 y'27 y'28 y'29 y'30 y'31 y'32 y'33 y'34 y'35 y'36 y'37 y'38 y'39 y'40 y'41 y'42 y'43)
+   = V1LayerParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+      (P'.mergeAppend x'8 y'8)
+      (P'.mergeAppend x'9 y'9)
+      (P'.mergeAppend x'10 y'10)
+      (P'.mergeAppend x'11 y'11)
+      (P'.mergeAppend x'12 y'12)
+      (P'.mergeAppend x'13 y'13)
+      (P'.mergeAppend x'14 y'14)
+      (P'.mergeAppend x'15 y'15)
+      (P'.mergeAppend x'16 y'16)
+      (P'.mergeAppend x'17 y'17)
+      (P'.mergeAppend x'18 y'18)
+      (P'.mergeAppend x'19 y'19)
+      (P'.mergeAppend x'20 y'20)
+      (P'.mergeAppend x'21 y'21)
+      (P'.mergeAppend x'22 y'22)
+      (P'.mergeAppend x'23 y'23)
+      (P'.mergeAppend x'24 y'24)
+      (P'.mergeAppend x'25 y'25)
+      (P'.mergeAppend x'26 y'26)
+      (P'.mergeAppend x'27 y'27)
+      (P'.mergeAppend x'28 y'28)
+      (P'.mergeAppend x'29 y'29)
+      (P'.mergeAppend x'30 y'30)
+      (P'.mergeAppend x'31 y'31)
+      (P'.mergeAppend x'32 y'32)
+      (P'.mergeAppend x'33 y'33)
+      (P'.mergeAppend x'34 y'34)
+      (P'.mergeAppend x'35 y'35)
+      (P'.mergeAppend x'36 y'36)
+      (P'.mergeAppend x'37 y'37)
+      (P'.mergeAppend x'38 y'38)
+      (P'.mergeAppend x'39 y'39)
+      (P'.mergeAppend x'40 y'40)
+      (P'.mergeAppend x'41 y'41)
+      (P'.mergeAppend x'42 y'42)
+      (P'.mergeAppend x'43 y'43)
+ 
+instance P'.Default V1LayerParameter where
+  defaultValue
+   = V1LayerParameter P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+      P'.defaultValue
+ 
+instance P'.Wire V1LayerParameter where
+  wireSize ft'
+   self'@(V1LayerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23
+           x'24 x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34 x'35 x'36 x'37 x'38 x'39 x'40 x'41 x'42 x'43)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeRep 1 9 x'1 + P'.wireSizeRep 1 9 x'2 + P'.wireSizeOpt 1 9 x'3 + P'.wireSizeRep 2 11 x'4 +
+             P'.wireSizeRep 2 11 x'5
+             + P'.wireSizeOpt 1 14 x'6
+             + P'.wireSizeRep 1 11 x'7
+             + P'.wireSizeRep 2 9 x'8
+             + P'.wireSizeRep 2 14 x'9
+             + P'.wireSizeRep 1 2 x'10
+             + P'.wireSizeRep 1 2 x'11
+             + P'.wireSizeRep 2 2 x'12
+             + P'.wireSizeOpt 2 11 x'13
+             + P'.wireSizeOpt 2 11 x'14
+             + P'.wireSizeOpt 1 11 x'15
+             + P'.wireSizeOpt 2 11 x'16
+             + P'.wireSizeOpt 1 11 x'17
+             + P'.wireSizeOpt 1 11 x'18
+             + P'.wireSizeOpt 1 11 x'19
+             + P'.wireSizeOpt 2 11 x'20
+             + P'.wireSizeOpt 2 11 x'21
+             + P'.wireSizeOpt 2 11 x'22
+             + P'.wireSizeOpt 1 11 x'23
+             + P'.wireSizeOpt 1 11 x'24
+             + P'.wireSizeOpt 2 11 x'25
+             + P'.wireSizeOpt 1 11 x'26
+             + P'.wireSizeOpt 2 11 x'27
+             + P'.wireSizeOpt 2 11 x'28
+             + P'.wireSizeOpt 2 11 x'29
+             + P'.wireSizeOpt 2 11 x'30
+             + P'.wireSizeOpt 2 11 x'31
+             + P'.wireSizeOpt 2 11 x'32
+             + P'.wireSizeOpt 2 11 x'33
+             + P'.wireSizeOpt 2 11 x'34
+             + P'.wireSizeOpt 2 11 x'35
+             + P'.wireSizeOpt 2 11 x'36
+             + P'.wireSizeOpt 2 11 x'37
+             + P'.wireSizeOpt 2 11 x'38
+             + P'.wireSizeOpt 2 11 x'39
+             + P'.wireSizeOpt 2 11 x'40
+             + P'.wireSizeOpt 2 11 x'41
+             + P'.wireSizeOpt 2 11 x'42
+             + P'.wireSizeOpt 1 11 x'43)
+  wirePut ft'
+   self'@(V1LayerParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13 x'14 x'15 x'16 x'17 x'18 x'19 x'20 x'21 x'22 x'23
+           x'24 x'25 x'26 x'27 x'28 x'29 x'30 x'31 x'32 x'33 x'34 x'35 x'36 x'37 x'38 x'39 x'40 x'41 x'42 x'43)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 11 x'43
+             P'.wirePutRep 18 9 x'1
+             P'.wirePutRep 26 9 x'2
+             P'.wirePutOpt 34 9 x'3
+             P'.wirePutOpt 40 14 x'6
+             P'.wirePutRep 50 11 x'7
+             P'.wirePutRep 61 2 x'10
+             P'.wirePutRep 69 2 x'11
+             P'.wirePutOpt 74 11 x'15
+             P'.wirePutOpt 82 11 x'17
+             P'.wirePutOpt 90 11 x'18
+             P'.wirePutOpt 98 11 x'19
+             P'.wirePutOpt 106 11 x'23
+             P'.wirePutOpt 114 11 x'24
+             P'.wirePutOpt 122 11 x'26
+             P'.wirePutOpt 130 11 x'27
+             P'.wirePutOpt 138 11 x'28
+             P'.wirePutOpt 146 11 x'29
+             P'.wirePutOpt 154 11 x'32
+             P'.wirePutOpt 162 11 x'40
+             P'.wirePutOpt 170 11 x'33
+             P'.wirePutOpt 178 11 x'30
+             P'.wirePutOpt 186 11 x'14
+             P'.wirePutOpt 194 11 x'21
+             P'.wirePutOpt 202 11 x'39
+             P'.wirePutOpt 210 11 x'20
+             P'.wirePutOpt 218 11 x'13
+             P'.wirePutOpt 234 11 x'25
+             P'.wirePutOpt 242 11 x'34
+             P'.wirePutOpt 250 11 x'37
+             P'.wirePutRep 258 11 x'4
+             P'.wirePutRep 266 11 x'5
+             P'.wirePutOpt 274 11 x'31
+             P'.wirePutRep 285 2 x'12
+             P'.wirePutOpt 290 11 x'41
+             P'.wirePutOpt 298 11 x'38
+             P'.wirePutOpt 306 11 x'35
+             P'.wirePutOpt 314 11 x'36
+             P'.wirePutOpt 322 11 x'16
+             P'.wirePutOpt 330 11 x'22
+             P'.wirePutOpt 338 11 x'42
+             P'.wirePutRep 8010 9 x'8
+             P'.wirePutRep 8016 14 x'9
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             18 -> Prelude'.fmap (\ !new'Field -> old'Self{bottom = P'.append (bottom old'Self) new'Field}) (P'.wireGet 9)
+             26 -> Prelude'.fmap (\ !new'Field -> old'Self{top = P'.append (top old'Self) new'Field}) (P'.wireGet 9)
+             34 -> Prelude'.fmap (\ !new'Field -> old'Self{name = Prelude'.Just new'Field}) (P'.wireGet 9)
+             258 -> Prelude'.fmap (\ !new'Field -> old'Self{include = P'.append (include old'Self) new'Field}) (P'.wireGet 11)
+             266 -> Prelude'.fmap (\ !new'Field -> old'Self{exclude = P'.append (exclude old'Self) new'Field}) (P'.wireGet 11)
+             40 -> Prelude'.fmap (\ !new'Field -> old'Self{type' = Prelude'.Just new'Field}) (P'.wireGet 14)
+             50 -> Prelude'.fmap (\ !new'Field -> old'Self{blobs = P'.append (blobs old'Self) new'Field}) (P'.wireGet 11)
+             8010 -> Prelude'.fmap (\ !new'Field -> old'Self{param = P'.append (param old'Self) new'Field}) (P'.wireGet 9)
+             8016 -> Prelude'.fmap (\ !new'Field -> old'Self{blob_share_mode = P'.append (blob_share_mode old'Self) new'Field})
+                      (P'.wireGet 14)
+             8018 -> Prelude'.fmap (\ !new'Field -> old'Self{blob_share_mode = P'.mergeAppend (blob_share_mode old'Self) new'Field})
+                      (P'.wireGetPacked 14)
+             61 -> Prelude'.fmap (\ !new'Field -> old'Self{blobs_lr = P'.append (blobs_lr old'Self) new'Field}) (P'.wireGet 2)
+             58 -> Prelude'.fmap (\ !new'Field -> old'Self{blobs_lr = P'.mergeAppend (blobs_lr old'Self) new'Field})
+                    (P'.wireGetPacked 2)
+             69 -> Prelude'.fmap (\ !new'Field -> old'Self{weight_decay = P'.append (weight_decay old'Self) new'Field})
+                    (P'.wireGet 2)
+             66 -> Prelude'.fmap (\ !new'Field -> old'Self{weight_decay = P'.mergeAppend (weight_decay old'Self) new'Field})
+                    (P'.wireGetPacked 2)
+             285 -> Prelude'.fmap (\ !new'Field -> old'Self{loss_weight = P'.append (loss_weight old'Self) new'Field})
+                     (P'.wireGet 2)
+             282 -> Prelude'.fmap (\ !new'Field -> old'Self{loss_weight = P'.mergeAppend (loss_weight old'Self) new'Field})
+                     (P'.wireGetPacked 2)
+             218 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{accuracy_param = P'.mergeAppend (accuracy_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             186 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{argmax_param = P'.mergeAppend (argmax_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             74 -> Prelude'.fmap
+                    (\ !new'Field -> old'Self{concat_param = P'.mergeAppend (concat_param old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             322 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{contrastive_loss_param =
+                                 P'.mergeAppend (contrastive_loss_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             82 -> Prelude'.fmap
+                    (\ !new'Field ->
+                      old'Self{convolution_param = P'.mergeAppend (convolution_param old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             90 -> Prelude'.fmap
+                    (\ !new'Field -> old'Self{data_param = P'.mergeAppend (data_param old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             98 -> Prelude'.fmap
+                    (\ !new'Field -> old'Self{dropout_param = P'.mergeAppend (dropout_param old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             210 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{dummy_data_param = P'.mergeAppend (dummy_data_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             194 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{eltwise_param = P'.mergeAppend (eltwise_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             330 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{exp_param = P'.mergeAppend (exp_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             106 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{hdf5_data_param = P'.mergeAppend (hdf5_data_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             114 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{hdf5_output_param = P'.mergeAppend (hdf5_output_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             234 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{hinge_loss_param = P'.mergeAppend (hinge_loss_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             122 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{image_data_param = P'.mergeAppend (image_data_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             130 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{infogain_loss_param = P'.mergeAppend (infogain_loss_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             138 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{inner_product_param = P'.mergeAppend (inner_product_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             146 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{lrn_param = P'.mergeAppend (lrn_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             178 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{memory_data_param = P'.mergeAppend (memory_data_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             274 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{mvn_param = P'.mergeAppend (mvn_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             154 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{pooling_param = P'.mergeAppend (pooling_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             170 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{power_param = P'.mergeAppend (power_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             242 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{relu_param = P'.mergeAppend (relu_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             306 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{sigmoid_param = P'.mergeAppend (sigmoid_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             314 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{softmax_param = P'.mergeAppend (softmax_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             250 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{slice_param = P'.mergeAppend (slice_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             298 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{tanh_param = P'.mergeAppend (tanh_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             202 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{threshold_param = P'.mergeAppend (threshold_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             162 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{window_data_param = P'.mergeAppend (window_data_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             290 -> Prelude'.fmap
+                     (\ !new'Field ->
+                       old'Self{transform_param = P'.mergeAppend (transform_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             338 -> Prelude'.fmap
+                     (\ !new'Field -> old'Self{loss_param = P'.mergeAppend (loss_param old'Self) (Prelude'.Just new'Field)})
+                     (P'.wireGet 11)
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{layer = P'.mergeAppend (layer old'Self) (Prelude'.Just new'Field)})
+                    (P'.wireGet 11)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> V1LayerParameter) V1LayerParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB V1LayerParameter
+ 
+instance P'.ReflectDescriptor V1LayerParameter where
+  getMessageInfo _
+   = P'.GetMessageInfo (P'.fromDistinctAscList [])
+      (P'.fromDistinctAscList
+        [10, 18, 26, 34, 40, 50, 58, 61, 66, 69, 74, 82, 90, 98, 106, 114, 122, 130, 138, 146, 154, 162, 170, 178, 186, 194, 202,
+         210, 218, 234, 242, 250, 258, 266, 274, 282, 285, 290, 298, 306, 314, 322, 330, 338, 8010, 8016, 8018])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.V1LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"V1LayerParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"V1LayerParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.bottom\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"bottom\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 18}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.top\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"top\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.name\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"name\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 34}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.include\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"include\"}, fieldNumber = FieldId {getFieldId = 32}, wireTag = WireTag {getWireTag = 258}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetStateRule\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetStateRule\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.exclude\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"exclude\"}, fieldNumber = FieldId {getFieldId = 33}, wireTag = WireTag {getWireTag = 266}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.NetStateRule\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"NetStateRule\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.type\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"type'\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.V1LayerParameter.LayerType\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName = MName \"LayerType\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.blobs\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"blobs\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 50}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.BlobProto\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"BlobProto\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"param\"}, fieldNumber = FieldId {getFieldId = 1001}, wireTag = WireTag {getWireTag = 8010}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.blob_share_mode\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"blob_share_mode\"}, fieldNumber = FieldId {getFieldId = 1002}, wireTag = WireTag {getWireTag = 8016}, packedTag = Just (WireTag {getWireTag = 8016},WireTag {getWireTag = 8018}), wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 14}, typeName = Just (ProtoName {protobufName = FIName \".caffe.V1LayerParameter.DimCheckMode\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName = MName \"DimCheckMode\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.blobs_lr\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"blobs_lr\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 61}, packedTag = Just (WireTag {getWireTag = 61},WireTag {getWireTag = 58}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.weight_decay\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"weight_decay\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 69}, packedTag = Just (WireTag {getWireTag = 69},WireTag {getWireTag = 66}), wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.loss_weight\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"loss_weight\"}, fieldNumber = FieldId {getFieldId = 35}, wireTag = WireTag {getWireTag = 285}, packedTag = Just (WireTag {getWireTag = 285},WireTag {getWireTag = 282}), wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = True, mightPack = True, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.accuracy_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"accuracy_param\"}, fieldNumber = FieldId {getFieldId = 27}, wireTag = WireTag {getWireTag = 218}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.AccuracyParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"AccuracyParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.argmax_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"argmax_param\"}, fieldNumber = FieldId {getFieldId = 23}, wireTag = WireTag {getWireTag = 186}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ArgMaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ArgMaxParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.concat_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"concat_param\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 74}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ConcatParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConcatParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.contrastive_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"contrastive_loss_param\"}, fieldNumber = FieldId {getFieldId = 40}, wireTag = WireTag {getWireTag = 322}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ContrastiveLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ContrastiveLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.convolution_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"convolution_param\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 82}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ConvolutionParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ConvolutionParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"data_param\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 90}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.dropout_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"dropout_param\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 98}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DropoutParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DropoutParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.dummy_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"dummy_data_param\"}, fieldNumber = FieldId {getFieldId = 26}, wireTag = WireTag {getWireTag = 210}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.DummyDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"DummyDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.eltwise_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"eltwise_param\"}, fieldNumber = FieldId {getFieldId = 24}, wireTag = WireTag {getWireTag = 194}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.EltwiseParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"EltwiseParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.exp_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"exp_param\"}, fieldNumber = FieldId {getFieldId = 41}, wireTag = WireTag {getWireTag = 330}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ExpParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ExpParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.hdf5_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"hdf5_data_param\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 106}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HDF5DataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5DataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.hdf5_output_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"hdf5_output_param\"}, fieldNumber = FieldId {getFieldId = 14}, wireTag = WireTag {getWireTag = 114}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HDF5OutputParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HDF5OutputParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.hinge_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"hinge_loss_param\"}, fieldNumber = FieldId {getFieldId = 29}, wireTag = WireTag {getWireTag = 234}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.HingeLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"HingeLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.image_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"image_data_param\"}, fieldNumber = FieldId {getFieldId = 15}, wireTag = WireTag {getWireTag = 122}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ImageDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ImageDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.infogain_loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"infogain_loss_param\"}, fieldNumber = FieldId {getFieldId = 16}, wireTag = WireTag {getWireTag = 130}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.InfogainLossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InfogainLossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.inner_product_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"inner_product_param\"}, fieldNumber = FieldId {getFieldId = 17}, wireTag = WireTag {getWireTag = 138}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.InnerProductParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"InnerProductParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.lrn_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"lrn_param\"}, fieldNumber = FieldId {getFieldId = 18}, wireTag = WireTag {getWireTag = 146}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LRNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LRNParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.memory_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"memory_data_param\"}, fieldNumber = FieldId {getFieldId = 22}, wireTag = WireTag {getWireTag = 178}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.MemoryDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MemoryDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.mvn_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"mvn_param\"}, fieldNumber = FieldId {getFieldId = 34}, wireTag = WireTag {getWireTag = 274}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.MVNParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"MVNParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.pooling_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"pooling_param\"}, fieldNumber = FieldId {getFieldId = 19}, wireTag = WireTag {getWireTag = 154}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PoolingParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PoolingParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.power_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"power_param\"}, fieldNumber = FieldId {getFieldId = 21}, wireTag = WireTag {getWireTag = 170}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.PowerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"PowerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.relu_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"relu_param\"}, fieldNumber = FieldId {getFieldId = 30}, wireTag = WireTag {getWireTag = 242}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ReLUParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ReLUParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.sigmoid_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"sigmoid_param\"}, fieldNumber = FieldId {getFieldId = 38}, wireTag = WireTag {getWireTag = 306}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SigmoidParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SigmoidParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.softmax_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"softmax_param\"}, fieldNumber = FieldId {getFieldId = 39}, wireTag = WireTag {getWireTag = 314}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SoftmaxParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SoftmaxParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.slice_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"slice_param\"}, fieldNumber = FieldId {getFieldId = 31}, wireTag = WireTag {getWireTag = 250}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.SliceParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"SliceParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.tanh_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"tanh_param\"}, fieldNumber = FieldId {getFieldId = 37}, wireTag = WireTag {getWireTag = 298}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.TanHParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TanHParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.threshold_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"threshold_param\"}, fieldNumber = FieldId {getFieldId = 25}, wireTag = WireTag {getWireTag = 202}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.ThresholdParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"ThresholdParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.window_data_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"window_data_param\"}, fieldNumber = FieldId {getFieldId = 20}, wireTag = WireTag {getWireTag = 162}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.WindowDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"WindowDataParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.transform_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"transform_param\"}, fieldNumber = FieldId {getFieldId = 36}, wireTag = WireTag {getWireTag = 290}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.TransformationParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"TransformationParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.loss_param\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"loss_param\"}, fieldNumber = FieldId {getFieldId = 42}, wireTag = WireTag {getWireTag = 338}, packedTag = Nothing, wireTagLength = 2, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.LossParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"LossParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.V1LayerParameter.layer\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"V1LayerParameter\"], baseName' = FName \"layer\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 11}, typeName = Just (ProtoName {protobufName = FIName \".caffe.V0LayerParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"V0LayerParameter\"}), hsRawDefault = Nothing, hsDefault = Nothing}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/Gen/Caffe/V1LayerParameter/DimCheckMode.hs b/Gen/Caffe/V1LayerParameter/DimCheckMode.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/V1LayerParameter/DimCheckMode.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.V1LayerParameter.DimCheckMode  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data DimCheckMode = STRICT
+                  | PERMISSIVE
+                  deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''DimCheckMode
+
+ 
+instance P'.Mergeable DimCheckMode
+ 
+instance Prelude'.Bounded DimCheckMode where
+  minBound = STRICT
+  maxBound = PERMISSIVE
+ 
+instance P'.Default DimCheckMode where
+  defaultValue = STRICT
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe DimCheckMode
+toMaybe'Enum 0 = Prelude'.Just STRICT
+toMaybe'Enum 1 = Prelude'.Just PERMISSIVE
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum DimCheckMode where
+  fromEnum STRICT = 0
+  fromEnum PERMISSIVE = 1
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.V1LayerParameter.DimCheckMode") .
+      toMaybe'Enum
+  succ STRICT = PERMISSIVE
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.V1LayerParameter.DimCheckMode"
+  pred PERMISSIVE = STRICT
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.V1LayerParameter.DimCheckMode"
+ 
+instance P'.Wire DimCheckMode where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB DimCheckMode
+ 
+instance P'.MessageAPI msg' (msg' -> DimCheckMode) DimCheckMode where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum DimCheckMode where
+  reflectEnum = [(0, "STRICT", STRICT), (1, "PERMISSIVE", PERMISSIVE)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.V1LayerParameter.DimCheckMode") ["Gen"] ["Caffe", "V1LayerParameter"] "DimCheckMode")
+      ["Gen", "Caffe", "V1LayerParameter", "DimCheckMode.hs"]
+      [(0, "STRICT"), (1, "PERMISSIVE")]
diff --git a/Gen/Caffe/V1LayerParameter/LayerType.hs b/Gen/Caffe/V1LayerParameter/LayerType.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/V1LayerParameter/LayerType.hs
@@ -0,0 +1,269 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.V1LayerParameter.LayerType  where
+import Prelude ((+), (/), (.))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data LayerType = NONE
+               | ABSVAL
+               | ACCURACY
+               | ARGMAX
+               | BNLL
+               | CONCAT
+               | CONTRASTIVE_LOSS
+               | CONVOLUTION
+               | DATA
+               | DECONVOLUTION
+               | DROPOUT
+               | DUMMY_DATA
+               | EUCLIDEAN_LOSS
+               | ELTWISE
+               | EXP
+               | FLATTEN
+               | HDF5_DATA
+               | HDF5_OUTPUT
+               | HINGE_LOSS
+               | IM2COL
+               | IMAGE_DATA
+               | INFOGAIN_LOSS
+               | INNER_PRODUCT
+               | LRN
+               | MEMORY_DATA
+               | MULTINOMIAL_LOGISTIC_LOSS
+               | MVN
+               | POOLING
+               | POWER
+               | RELU
+               | SIGMOID
+               | SIGMOID_CROSS_ENTROPY_LOSS
+               | SILENCE
+               | SOFTMAX
+               | SOFTMAX_LOSS
+               | SPLIT
+               | SLICE
+               | TANH
+               | WINDOW_DATA
+               | THRESHOLD
+               deriving (Prelude'.Read, Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''LayerType
+
+ 
+instance P'.Mergeable LayerType
+ 
+instance Prelude'.Bounded LayerType where
+  minBound = NONE
+  maxBound = THRESHOLD
+ 
+instance P'.Default LayerType where
+  defaultValue = NONE
+ 
+toMaybe'Enum :: Prelude'.Int -> P'.Maybe LayerType
+toMaybe'Enum 0 = Prelude'.Just NONE
+toMaybe'Enum 35 = Prelude'.Just ABSVAL
+toMaybe'Enum 1 = Prelude'.Just ACCURACY
+toMaybe'Enum 30 = Prelude'.Just ARGMAX
+toMaybe'Enum 2 = Prelude'.Just BNLL
+toMaybe'Enum 3 = Prelude'.Just CONCAT
+toMaybe'Enum 37 = Prelude'.Just CONTRASTIVE_LOSS
+toMaybe'Enum 4 = Prelude'.Just CONVOLUTION
+toMaybe'Enum 5 = Prelude'.Just DATA
+toMaybe'Enum 39 = Prelude'.Just DECONVOLUTION
+toMaybe'Enum 6 = Prelude'.Just DROPOUT
+toMaybe'Enum 32 = Prelude'.Just DUMMY_DATA
+toMaybe'Enum 7 = Prelude'.Just EUCLIDEAN_LOSS
+toMaybe'Enum 25 = Prelude'.Just ELTWISE
+toMaybe'Enum 38 = Prelude'.Just EXP
+toMaybe'Enum 8 = Prelude'.Just FLATTEN
+toMaybe'Enum 9 = Prelude'.Just HDF5_DATA
+toMaybe'Enum 10 = Prelude'.Just HDF5_OUTPUT
+toMaybe'Enum 28 = Prelude'.Just HINGE_LOSS
+toMaybe'Enum 11 = Prelude'.Just IM2COL
+toMaybe'Enum 12 = Prelude'.Just IMAGE_DATA
+toMaybe'Enum 13 = Prelude'.Just INFOGAIN_LOSS
+toMaybe'Enum 14 = Prelude'.Just INNER_PRODUCT
+toMaybe'Enum 15 = Prelude'.Just LRN
+toMaybe'Enum 29 = Prelude'.Just MEMORY_DATA
+toMaybe'Enum 16 = Prelude'.Just MULTINOMIAL_LOGISTIC_LOSS
+toMaybe'Enum 34 = Prelude'.Just MVN
+toMaybe'Enum 17 = Prelude'.Just POOLING
+toMaybe'Enum 26 = Prelude'.Just POWER
+toMaybe'Enum 18 = Prelude'.Just RELU
+toMaybe'Enum 19 = Prelude'.Just SIGMOID
+toMaybe'Enum 27 = Prelude'.Just SIGMOID_CROSS_ENTROPY_LOSS
+toMaybe'Enum 36 = Prelude'.Just SILENCE
+toMaybe'Enum 20 = Prelude'.Just SOFTMAX
+toMaybe'Enum 21 = Prelude'.Just SOFTMAX_LOSS
+toMaybe'Enum 22 = Prelude'.Just SPLIT
+toMaybe'Enum 33 = Prelude'.Just SLICE
+toMaybe'Enum 23 = Prelude'.Just TANH
+toMaybe'Enum 24 = Prelude'.Just WINDOW_DATA
+toMaybe'Enum 31 = Prelude'.Just THRESHOLD
+toMaybe'Enum _ = Prelude'.Nothing
+ 
+instance Prelude'.Enum LayerType where
+  fromEnum NONE = 0
+  fromEnum ABSVAL = 35
+  fromEnum ACCURACY = 1
+  fromEnum ARGMAX = 30
+  fromEnum BNLL = 2
+  fromEnum CONCAT = 3
+  fromEnum CONTRASTIVE_LOSS = 37
+  fromEnum CONVOLUTION = 4
+  fromEnum DATA = 5
+  fromEnum DECONVOLUTION = 39
+  fromEnum DROPOUT = 6
+  fromEnum DUMMY_DATA = 32
+  fromEnum EUCLIDEAN_LOSS = 7
+  fromEnum ELTWISE = 25
+  fromEnum EXP = 38
+  fromEnum FLATTEN = 8
+  fromEnum HDF5_DATA = 9
+  fromEnum HDF5_OUTPUT = 10
+  fromEnum HINGE_LOSS = 28
+  fromEnum IM2COL = 11
+  fromEnum IMAGE_DATA = 12
+  fromEnum INFOGAIN_LOSS = 13
+  fromEnum INNER_PRODUCT = 14
+  fromEnum LRN = 15
+  fromEnum MEMORY_DATA = 29
+  fromEnum MULTINOMIAL_LOGISTIC_LOSS = 16
+  fromEnum MVN = 34
+  fromEnum POOLING = 17
+  fromEnum POWER = 26
+  fromEnum RELU = 18
+  fromEnum SIGMOID = 19
+  fromEnum SIGMOID_CROSS_ENTROPY_LOSS = 27
+  fromEnum SILENCE = 36
+  fromEnum SOFTMAX = 20
+  fromEnum SOFTMAX_LOSS = 21
+  fromEnum SPLIT = 22
+  fromEnum SLICE = 33
+  fromEnum TANH = 23
+  fromEnum WINDOW_DATA = 24
+  fromEnum THRESHOLD = 31
+  toEnum
+   = P'.fromMaybe (Prelude'.error "hprotoc generated code: toEnum failure for type Gen.Caffe.V1LayerParameter.LayerType") .
+      toMaybe'Enum
+  succ NONE = ABSVAL
+  succ ABSVAL = ACCURACY
+  succ ACCURACY = ARGMAX
+  succ ARGMAX = BNLL
+  succ BNLL = CONCAT
+  succ CONCAT = CONTRASTIVE_LOSS
+  succ CONTRASTIVE_LOSS = CONVOLUTION
+  succ CONVOLUTION = DATA
+  succ DATA = DECONVOLUTION
+  succ DECONVOLUTION = DROPOUT
+  succ DROPOUT = DUMMY_DATA
+  succ DUMMY_DATA = EUCLIDEAN_LOSS
+  succ EUCLIDEAN_LOSS = ELTWISE
+  succ ELTWISE = EXP
+  succ EXP = FLATTEN
+  succ FLATTEN = HDF5_DATA
+  succ HDF5_DATA = HDF5_OUTPUT
+  succ HDF5_OUTPUT = HINGE_LOSS
+  succ HINGE_LOSS = IM2COL
+  succ IM2COL = IMAGE_DATA
+  succ IMAGE_DATA = INFOGAIN_LOSS
+  succ INFOGAIN_LOSS = INNER_PRODUCT
+  succ INNER_PRODUCT = LRN
+  succ LRN = MEMORY_DATA
+  succ MEMORY_DATA = MULTINOMIAL_LOGISTIC_LOSS
+  succ MULTINOMIAL_LOGISTIC_LOSS = MVN
+  succ MVN = POOLING
+  succ POOLING = POWER
+  succ POWER = RELU
+  succ RELU = SIGMOID
+  succ SIGMOID = SIGMOID_CROSS_ENTROPY_LOSS
+  succ SIGMOID_CROSS_ENTROPY_LOSS = SILENCE
+  succ SILENCE = SOFTMAX
+  succ SOFTMAX = SOFTMAX_LOSS
+  succ SOFTMAX_LOSS = SPLIT
+  succ SPLIT = SLICE
+  succ SLICE = TANH
+  succ TANH = WINDOW_DATA
+  succ WINDOW_DATA = THRESHOLD
+  succ _ = Prelude'.error "hprotoc generated code: succ failure for type Gen.Caffe.V1LayerParameter.LayerType"
+  pred ABSVAL = NONE
+  pred ACCURACY = ABSVAL
+  pred ARGMAX = ACCURACY
+  pred BNLL = ARGMAX
+  pred CONCAT = BNLL
+  pred CONTRASTIVE_LOSS = CONCAT
+  pred CONVOLUTION = CONTRASTIVE_LOSS
+  pred DATA = CONVOLUTION
+  pred DECONVOLUTION = DATA
+  pred DROPOUT = DECONVOLUTION
+  pred DUMMY_DATA = DROPOUT
+  pred EUCLIDEAN_LOSS = DUMMY_DATA
+  pred ELTWISE = EUCLIDEAN_LOSS
+  pred EXP = ELTWISE
+  pred FLATTEN = EXP
+  pred HDF5_DATA = FLATTEN
+  pred HDF5_OUTPUT = HDF5_DATA
+  pred HINGE_LOSS = HDF5_OUTPUT
+  pred IM2COL = HINGE_LOSS
+  pred IMAGE_DATA = IM2COL
+  pred INFOGAIN_LOSS = IMAGE_DATA
+  pred INNER_PRODUCT = INFOGAIN_LOSS
+  pred LRN = INNER_PRODUCT
+  pred MEMORY_DATA = LRN
+  pred MULTINOMIAL_LOGISTIC_LOSS = MEMORY_DATA
+  pred MVN = MULTINOMIAL_LOGISTIC_LOSS
+  pred POOLING = MVN
+  pred POWER = POOLING
+  pred RELU = POWER
+  pred SIGMOID = RELU
+  pred SIGMOID_CROSS_ENTROPY_LOSS = SIGMOID
+  pred SILENCE = SIGMOID_CROSS_ENTROPY_LOSS
+  pred SOFTMAX = SILENCE
+  pred SOFTMAX_LOSS = SOFTMAX
+  pred SPLIT = SOFTMAX_LOSS
+  pred SLICE = SPLIT
+  pred TANH = SLICE
+  pred WINDOW_DATA = TANH
+  pred THRESHOLD = WINDOW_DATA
+  pred _ = Prelude'.error "hprotoc generated code: pred failure for type Gen.Caffe.V1LayerParameter.LayerType"
+ 
+instance P'.Wire LayerType where
+  wireSize ft' enum = P'.wireSize ft' (Prelude'.fromEnum enum)
+  wirePut ft' enum = P'.wirePut ft' (Prelude'.fromEnum enum)
+  wireGet 14 = P'.wireGetEnum toMaybe'Enum
+  wireGet ft' = P'.wireGetErr ft'
+  wireGetPacked 14 = P'.wireGetPackedEnum toMaybe'Enum
+  wireGetPacked ft' = P'.wireGetErr ft'
+ 
+instance P'.GPB LayerType
+ 
+instance P'.MessageAPI msg' (msg' -> LayerType) LayerType where
+  getVal m' f' = f' m'
+ 
+instance P'.ReflectEnum LayerType where
+  reflectEnum
+   = [(0, "NONE", NONE), (35, "ABSVAL", ABSVAL), (1, "ACCURACY", ACCURACY), (30, "ARGMAX", ARGMAX), (2, "BNLL", BNLL),
+      (3, "CONCAT", CONCAT), (37, "CONTRASTIVE_LOSS", CONTRASTIVE_LOSS), (4, "CONVOLUTION", CONVOLUTION), (5, "DATA", DATA),
+      (39, "DECONVOLUTION", DECONVOLUTION), (6, "DROPOUT", DROPOUT), (32, "DUMMY_DATA", DUMMY_DATA),
+      (7, "EUCLIDEAN_LOSS", EUCLIDEAN_LOSS), (25, "ELTWISE", ELTWISE), (38, "EXP", EXP), (8, "FLATTEN", FLATTEN),
+      (9, "HDF5_DATA", HDF5_DATA), (10, "HDF5_OUTPUT", HDF5_OUTPUT), (28, "HINGE_LOSS", HINGE_LOSS), (11, "IM2COL", IM2COL),
+      (12, "IMAGE_DATA", IMAGE_DATA), (13, "INFOGAIN_LOSS", INFOGAIN_LOSS), (14, "INNER_PRODUCT", INNER_PRODUCT), (15, "LRN", LRN),
+      (29, "MEMORY_DATA", MEMORY_DATA), (16, "MULTINOMIAL_LOGISTIC_LOSS", MULTINOMIAL_LOGISTIC_LOSS), (34, "MVN", MVN),
+      (17, "POOLING", POOLING), (26, "POWER", POWER), (18, "RELU", RELU), (19, "SIGMOID", SIGMOID),
+      (27, "SIGMOID_CROSS_ENTROPY_LOSS", SIGMOID_CROSS_ENTROPY_LOSS), (36, "SILENCE", SILENCE), (20, "SOFTMAX", SOFTMAX),
+      (21, "SOFTMAX_LOSS", SOFTMAX_LOSS), (22, "SPLIT", SPLIT), (33, "SLICE", SLICE), (23, "TANH", TANH),
+      (24, "WINDOW_DATA", WINDOW_DATA), (31, "THRESHOLD", THRESHOLD)]
+  reflectEnumInfo _
+   = P'.EnumInfo (P'.makePNF (P'.pack ".caffe.V1LayerParameter.LayerType") ["Gen"] ["Caffe", "V1LayerParameter"] "LayerType")
+      ["Gen", "Caffe", "V1LayerParameter", "LayerType.hs"]
+      [(0, "NONE"), (35, "ABSVAL"), (1, "ACCURACY"), (30, "ARGMAX"), (2, "BNLL"), (3, "CONCAT"), (37, "CONTRASTIVE_LOSS"),
+       (4, "CONVOLUTION"), (5, "DATA"), (39, "DECONVOLUTION"), (6, "DROPOUT"), (32, "DUMMY_DATA"), (7, "EUCLIDEAN_LOSS"),
+       (25, "ELTWISE"), (38, "EXP"), (8, "FLATTEN"), (9, "HDF5_DATA"), (10, "HDF5_OUTPUT"), (28, "HINGE_LOSS"), (11, "IM2COL"),
+       (12, "IMAGE_DATA"), (13, "INFOGAIN_LOSS"), (14, "INNER_PRODUCT"), (15, "LRN"), (29, "MEMORY_DATA"),
+       (16, "MULTINOMIAL_LOGISTIC_LOSS"), (34, "MVN"), (17, "POOLING"), (26, "POWER"), (18, "RELU"), (19, "SIGMOID"),
+       (27, "SIGMOID_CROSS_ENTROPY_LOSS"), (36, "SILENCE"), (20, "SOFTMAX"), (21, "SOFTMAX_LOSS"), (22, "SPLIT"), (33, "SLICE"),
+       (23, "TANH"), (24, "WINDOW_DATA"), (31, "THRESHOLD")]
diff --git a/Gen/Caffe/WindowDataParameter.hs b/Gen/Caffe/WindowDataParameter.hs
new file mode 100644
--- /dev/null
+++ b/Gen/Caffe/WindowDataParameter.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE BangPatterns, DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses #-}
+module Gen.Caffe.WindowDataParameter  where
+import Prelude ((+), (/))
+import qualified Prelude as Prelude'
+import qualified Data.Typeable as Prelude'
+import qualified Data.Data as Prelude'
+import qualified Text.ProtocolBuffers.Header as P'
+ 
+import Language.Haskell.TH.Syntax
+import Control.Lens
+data WindowDataParameter = WindowDataParameter{source :: !(P'.Maybe P'.Utf8), scale :: !(P'.Maybe P'.Float),
+                                               mean_file :: !(P'.Maybe P'.Utf8), batch_size :: !(P'.Maybe P'.Word32),
+                                               crop_size :: !(P'.Maybe P'.Word32), mirror :: !(P'.Maybe P'.Bool),
+                                               fg_threshold :: !(P'.Maybe P'.Float), bg_threshold :: !(P'.Maybe P'.Float),
+                                               fg_fraction :: !(P'.Maybe P'.Float), context_pad :: !(P'.Maybe P'.Word32),
+                                               crop_mode :: !(P'.Maybe P'.Utf8), cache_images :: !(P'.Maybe P'.Bool),
+                                               root_folder :: !(P'.Maybe P'.Utf8)}
+                         deriving (Prelude'.Show, Prelude'.Eq, Prelude'.Ord, Prelude'.Typeable, Prelude'.Data)
+
+makeLensesWith (lensRules & lensField .~ \_ _ name -> [TopName (mkName Prelude'.$ "_" Prelude'.++ nameBase name)]) ''WindowDataParameter
+
+ 
+instance P'.Mergeable WindowDataParameter where
+  mergeAppend (WindowDataParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13)
+   (WindowDataParameter y'1 y'2 y'3 y'4 y'5 y'6 y'7 y'8 y'9 y'10 y'11 y'12 y'13)
+   = WindowDataParameter (P'.mergeAppend x'1 y'1) (P'.mergeAppend x'2 y'2) (P'.mergeAppend x'3 y'3) (P'.mergeAppend x'4 y'4)
+      (P'.mergeAppend x'5 y'5)
+      (P'.mergeAppend x'6 y'6)
+      (P'.mergeAppend x'7 y'7)
+      (P'.mergeAppend x'8 y'8)
+      (P'.mergeAppend x'9 y'9)
+      (P'.mergeAppend x'10 y'10)
+      (P'.mergeAppend x'11 y'11)
+      (P'.mergeAppend x'12 y'12)
+      (P'.mergeAppend x'13 y'13)
+ 
+instance P'.Default WindowDataParameter where
+  defaultValue
+   = WindowDataParameter P'.defaultValue (Prelude'.Just 1.0) P'.defaultValue P'.defaultValue (Prelude'.Just 0)
+      (Prelude'.Just Prelude'.False)
+      (Prelude'.Just 0.5)
+      (Prelude'.Just 0.5)
+      (Prelude'.Just 0.25)
+      (Prelude'.Just 0)
+      (Prelude'.Just (P'.Utf8 (P'.pack "warp")))
+      (Prelude'.Just Prelude'.False)
+      (Prelude'.Just (P'.Utf8 (P'.pack "")))
+ 
+instance P'.Wire WindowDataParameter where
+  wireSize ft' self'@(WindowDataParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13)
+   = case ft' of
+       10 -> calc'Size
+       11 -> P'.prependMessageSize calc'Size
+       _ -> P'.wireSizeErr ft' self'
+    where
+        calc'Size
+         = (P'.wireSizeOpt 1 9 x'1 + P'.wireSizeOpt 1 2 x'2 + P'.wireSizeOpt 1 9 x'3 + P'.wireSizeOpt 1 13 x'4 +
+             P'.wireSizeOpt 1 13 x'5
+             + P'.wireSizeOpt 1 8 x'6
+             + P'.wireSizeOpt 1 2 x'7
+             + P'.wireSizeOpt 1 2 x'8
+             + P'.wireSizeOpt 1 2 x'9
+             + P'.wireSizeOpt 1 13 x'10
+             + P'.wireSizeOpt 1 9 x'11
+             + P'.wireSizeOpt 1 8 x'12
+             + P'.wireSizeOpt 1 9 x'13)
+  wirePut ft' self'@(WindowDataParameter x'1 x'2 x'3 x'4 x'5 x'6 x'7 x'8 x'9 x'10 x'11 x'12 x'13)
+   = case ft' of
+       10 -> put'Fields
+       11 -> do
+               P'.putSize (P'.wireSize 10 self')
+               put'Fields
+       _ -> P'.wirePutErr ft' self'
+    where
+        put'Fields
+         = do
+             P'.wirePutOpt 10 9 x'1
+             P'.wirePutOpt 21 2 x'2
+             P'.wirePutOpt 26 9 x'3
+             P'.wirePutOpt 32 13 x'4
+             P'.wirePutOpt 40 13 x'5
+             P'.wirePutOpt 48 8 x'6
+             P'.wirePutOpt 61 2 x'7
+             P'.wirePutOpt 69 2 x'8
+             P'.wirePutOpt 77 2 x'9
+             P'.wirePutOpt 80 13 x'10
+             P'.wirePutOpt 90 9 x'11
+             P'.wirePutOpt 96 8 x'12
+             P'.wirePutOpt 106 9 x'13
+  wireGet ft'
+   = case ft' of
+       10 -> P'.getBareMessageWith update'Self
+       11 -> P'.getMessageWith update'Self
+       _ -> P'.wireGetErr ft'
+    where
+        update'Self wire'Tag old'Self
+         = case wire'Tag of
+             10 -> Prelude'.fmap (\ !new'Field -> old'Self{source = Prelude'.Just new'Field}) (P'.wireGet 9)
+             21 -> Prelude'.fmap (\ !new'Field -> old'Self{scale = Prelude'.Just new'Field}) (P'.wireGet 2)
+             26 -> Prelude'.fmap (\ !new'Field -> old'Self{mean_file = Prelude'.Just new'Field}) (P'.wireGet 9)
+             32 -> Prelude'.fmap (\ !new'Field -> old'Self{batch_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             40 -> Prelude'.fmap (\ !new'Field -> old'Self{crop_size = Prelude'.Just new'Field}) (P'.wireGet 13)
+             48 -> Prelude'.fmap (\ !new'Field -> old'Self{mirror = Prelude'.Just new'Field}) (P'.wireGet 8)
+             61 -> Prelude'.fmap (\ !new'Field -> old'Self{fg_threshold = Prelude'.Just new'Field}) (P'.wireGet 2)
+             69 -> Prelude'.fmap (\ !new'Field -> old'Self{bg_threshold = Prelude'.Just new'Field}) (P'.wireGet 2)
+             77 -> Prelude'.fmap (\ !new'Field -> old'Self{fg_fraction = Prelude'.Just new'Field}) (P'.wireGet 2)
+             80 -> Prelude'.fmap (\ !new'Field -> old'Self{context_pad = Prelude'.Just new'Field}) (P'.wireGet 13)
+             90 -> Prelude'.fmap (\ !new'Field -> old'Self{crop_mode = Prelude'.Just new'Field}) (P'.wireGet 9)
+             96 -> Prelude'.fmap (\ !new'Field -> old'Self{cache_images = Prelude'.Just new'Field}) (P'.wireGet 8)
+             106 -> Prelude'.fmap (\ !new'Field -> old'Self{root_folder = Prelude'.Just new'Field}) (P'.wireGet 9)
+             _ -> let (field'Number, wire'Type) = P'.splitWireTag wire'Tag in P'.unknown field'Number wire'Type old'Self
+ 
+instance P'.MessageAPI msg' (msg' -> WindowDataParameter) WindowDataParameter where
+  getVal m' f' = f' m'
+ 
+instance P'.GPB WindowDataParameter
+ 
+instance P'.ReflectDescriptor WindowDataParameter where
+  getMessageInfo _
+   = P'.GetMessageInfo (P'.fromDistinctAscList []) (P'.fromDistinctAscList [10, 21, 26, 32, 40, 48, 61, 69, 77, 80, 90, 96, 106])
+  reflectDescriptorInfo _
+   = Prelude'.read
+      "DescriptorInfo {descName = ProtoName {protobufName = FIName \".caffe.WindowDataParameter\", haskellPrefix = [MName \"Gen\"], parentModule = [MName \"Caffe\"], baseName = MName \"WindowDataParameter\"}, descFilePath = [\"Gen\",\"Caffe\",\"WindowDataParameter.hs\"], isGroup = False, fields = fromList [FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.source\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"source\"}, fieldNumber = FieldId {getFieldId = 1}, wireTag = WireTag {getWireTag = 10}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.scale\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"scale\"}, fieldNumber = FieldId {getFieldId = 2}, wireTag = WireTag {getWireTag = 21}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"1.0\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 1)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.mean_file\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"mean_file\"}, fieldNumber = FieldId {getFieldId = 3}, wireTag = WireTag {getWireTag = 26}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.batch_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"batch_size\"}, fieldNumber = FieldId {getFieldId = 4}, wireTag = WireTag {getWireTag = 32}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Nothing, hsDefault = Nothing},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.crop_size\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"crop_size\"}, fieldNumber = FieldId {getFieldId = 5}, wireTag = WireTag {getWireTag = 40}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.mirror\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"mirror\"}, fieldNumber = FieldId {getFieldId = 6}, wireTag = WireTag {getWireTag = 48}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.fg_threshold\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"fg_threshold\"}, fieldNumber = FieldId {getFieldId = 7}, wireTag = WireTag {getWireTag = 61}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.bg_threshold\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"bg_threshold\"}, fieldNumber = FieldId {getFieldId = 8}, wireTag = WireTag {getWireTag = 69}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.5\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 2)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.fg_fraction\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"fg_fraction\"}, fieldNumber = FieldId {getFieldId = 9}, wireTag = WireTag {getWireTag = 77}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 2}, typeName = Nothing, hsRawDefault = Just \"0.25\", hsDefault = Just (HsDef'RealFloat (SRF'Rational (1 % 4)))},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.context_pad\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"context_pad\"}, fieldNumber = FieldId {getFieldId = 10}, wireTag = WireTag {getWireTag = 80}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 13}, typeName = Nothing, hsRawDefault = Just \"0\", hsDefault = Just (HsDef'Integer 0)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.crop_mode\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"crop_mode\"}, fieldNumber = FieldId {getFieldId = 11}, wireTag = WireTag {getWireTag = 90}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"warp\", hsDefault = Just (HsDef'ByteString \"warp\")},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.cache_images\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"cache_images\"}, fieldNumber = FieldId {getFieldId = 12}, wireTag = WireTag {getWireTag = 96}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 8}, typeName = Nothing, hsRawDefault = Just \"false\", hsDefault = Just (HsDef'Bool False)},FieldInfo {fieldName = ProtoFName {protobufName' = FIName \".caffe.WindowDataParameter.root_folder\", haskellPrefix' = [MName \"Gen\"], parentModule' = [MName \"Caffe\",MName \"WindowDataParameter\"], baseName' = FName \"root_folder\"}, fieldNumber = FieldId {getFieldId = 13}, wireTag = WireTag {getWireTag = 106}, packedTag = Nothing, wireTagLength = 1, isPacked = False, isRequired = False, canRepeat = False, mightPack = False, typeCode = FieldType {getFieldType = 9}, typeName = Nothing, hsRawDefault = Just \"\", hsDefault = Just (HsDef'ByteString \"\")}], keys = fromList [], extRanges = [], knownKeys = fromList [], storeUnknown = False, lazyFields = False}"
diff --git a/NN.hs b/NN.hs
--- a/NN.hs
+++ b/NN.hs
@@ -1,11 +1,7 @@
-module NN(module NN.DSL,
-          module NN.CLI,
-          module NN.Graph,
-          module NN.Passes,
-          module NN.Visualize) where
+module NN(module X) where
 
-import           NN.CLI
-import           NN.DSL
-import           NN.Graph
-import           NN.Passes
-import           NN.Visualize
+import           NN.CLI       as X
+import           NN.DSL       as X
+import           NN.Graph     as X
+import           NN.Passes    as X
+import           NN.Visualize as X
diff --git a/NN/Backend/Caffe.hs b/NN/Backend/Caffe.hs
--- a/NN/Backend/Caffe.hs
+++ b/NN/Backend/Caffe.hs
@@ -1,11 +1,21 @@
-module NN.Backend.Caffe where
+module NN.Backend.Caffe(caffePasses, middleEnd, backend, addConnection, addLabels, optimizeInPlaceLayer) where
 
 import           Gen.Caffe.NetParameter     as NP
 
-import           Control.Lens
 import           Data.Graph.Inductive.Query
+import           Gen.Caffe.LayerParameter   as LP
+
+import           Control.Lens
+import           Data.Char
+import qualified Data.Foldable              as F
+import           Data.Graph.Inductive.Graph hiding ((&))
+import qualified Data.Graph.Inductive.Graph as G
+import           Data.Maybe
 import qualified Data.Sequence              as S
 
+import           Text.Printf
+import           Text.ProtocolBuffers       as P
+
 import           NN.DSL
 import           NN.Passes
 
@@ -15,5 +25,64 @@
 middleEnd :: Net -> Net
 middleEnd = optimizeWith caffePasses
 
+
+layerName :: LayerParameter -> Int -> Utf8
+layerName l i = printf "%s_%d" (type' l & fromJust & toString & map toLower) i & s
+
 backend :: Net -> NetParameter
 backend gr = def & _layer <>~ S.fromList (topsort' gr)
+
+addLabels :: Pass
+addLabels (_, _, lp) = update (layerTy lp)
+    where
+      update Data = lp & LP._top <>~ S.singleton (s "label")
+      update SoftmaxWithLoss = lp & LP._bottom <>~ S.singleton (s "label")
+      update Accuracy = lp & LP._bottom <>~ S.singleton (s "label")
+      update _ = lp
+
+-- |If our layerTy is the given layer that is performed in-place, then
+-- update `top` to point to `bottom`.
+-- If any of our parents are performed in-place, update `bottom` to
+-- point to our parents `top`
+optimizeInPlaceLayer :: LayerTy -> [Pass]
+optimizeInPlaceLayer layerTy' = [updateIfInPlace, updateIfParentInPlace] where
+    inPlace lp = layerTy lp == layerTy'
+    inPlaceParents gr i = filter inPlace . map fst $ pres gr i
+
+    updateIfInPlace (_, i, lp) =
+        case (layerTy lp == layerTy', F.toList (top lp)) of
+          (True, [_]) -> lp & LP._top .~ bottom lp
+          (True, _) -> error $ printf "Can only have one output for an in-place layer" ++ show (layerName lp i)
+          (False, _) -> lp
+
+    updateIfParentInPlace :: Pass
+    updateIfParentInPlace (gr, i, lp) =
+        case updateFromParents (gr, i, lp) of
+          Left e -> error e
+          Right lp' -> lp'
+
+    updateFromParents :: (Net, Node, LayerParameter) -> Either String LayerParameter
+    updateFromParents (gr, i, lp) =
+       case (inPlaceParents gr i, F.toList (bottom lp)) of
+         ([], _) -> Right lp
+         (parents, bottoms) ->
+             -- TODO this is super dodgy and incorrect in the general
+             -- case (there are some weird invariants we rely on), but it works for now.
+             if length parents /= length bottoms
+             then Left $ printf "Must have all parents in-place for in-place optimizations" ++ show (layerName lp i)
+             else let parentTops = F.concatMap (F.toList . LP.top) parents in
+                  if length parentTops == length ((F.toList . LP.bottom) lp)
+                  then Right $ lp & LP._bottom .~ S.fromList parentTops
+                  else Left $ error "asdf"
+
+labelled :: Net -> [Node] -> [(LayerParameter, Node)]
+labelled gr = map (\ j -> (lab' (context gr j), j))
+
+pres :: Net -> Node -> [(LayerParameter, Node)]
+pres gr j = labelled gr (G.pre gr j)
+
+addConnection :: Pass
+addConnection (gr, i, lp) = lp
+                            & LP._name ?~ layerName lp i
+                            & LP._bottom .~ S.fromList (map (uncurry layerName) (pres gr i))
+                            & LP._top <>~ S.singleton (layerName lp i)
diff --git a/NN/Backend/Torch.hs b/NN/Backend/Torch.hs
--- a/NN/Backend/Torch.hs
+++ b/NN/Backend/Torch.hs
@@ -1,9 +1,10 @@
 module NN.Backend.Torch(NN.Backend.Torch.backend) where
 
+import           Control.Applicative
+
 import           NN.Backend.Torch.Codegen
 import           NN.Backend.Torch.Torch
-
 import           NN.DSL
 
 backend :: Net -> Maybe String
-backend  = fmap (codegen . lower) . linearize . clean
+backend  = (codegen . lower <$>) . linearize . clean
diff --git a/NN/CLI.hs b/NN/CLI.hs
--- a/NN/CLI.hs
+++ b/NN/CLI.hs
@@ -1,4 +1,4 @@
-module NN.CLI where
+module NN.CLI(cli) where
 
 import           Control.Applicative
 import           Control.Lens          hiding ((<.>))
@@ -32,13 +32,6 @@
 
 data Command = Caffe String String | Torch String | PDF String
 
-filename = strOption (long "output" <> help "Write output to FILE" <> metavar "FILE")
-binaryToText = strOption (long "binary_to_text"
-                          <> help "Path to binary_to_text.py BINARY"
-                          <> showDefault
-                          <> metavar "BINARY"
-                          <> value "./binary_to_text.py")
-
 opts :: Parser Command
 opts = subparser (caffe <> torch <> pdf')
        where
@@ -46,6 +39,12 @@
          caffe = nc "caffe" (Caffe <$> filename <*> binaryToText) "Generate a Caffe .prototxt to run with `caffe train --model=<>"
          torch = nc "torch" (Torch <$> filename) "Generate Lua code to be `require`'d into an existing Torch script"
          pdf' = nc "pdf" (PDF <$> filename) "Generate a PDF visualizing the model's connectivity"
+         filename = strOption (long "output" <> help "Write output to FILE" <> metavar "FILE")
+         binaryToText = strOption (long "binary_to_text"
+                                   <> help "Path to binary_to_text.py BINARY"
+                                   <> showDefault
+                                   <> metavar "BINARY"
+                                   <> value "./binary_to_text.py")
 
 run :: NetBuilder -> Command -> IO ()
 run net (Caffe prototxtPath binaryToTextPath) = caffePrototxt net prototxtPath binaryToTextPath
diff --git a/NN/DSL.hs b/NN/DSL.hs
--- a/NN/DSL.hs
+++ b/NN/DSL.hs
@@ -1,10 +1,10 @@
 {-# LANGUAGE OverloadedStrings #-}
-module NN.DSL(module NN.DSL, P.Phase(..), DP.DB(..), LP.LayerParameter) where
+{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
+module NN.DSL(module NN.DSL) where
 
 import           Gen.Caffe.AccuracyParameter           as AP
 import           Gen.Caffe.ConvolutionParameter        as CP
 import           Gen.Caffe.DataParameter               as DP
-import           Gen.Caffe.DataParameter.DB            as DP
 import           Gen.Caffe.DropoutParameter            as DP
 import           Gen.Caffe.FillerParameter             as FP
 import           Gen.Caffe.InnerProductParameter       as IP
diff --git a/NN/Examples/AlexNet.hs b/NN/Examples/AlexNet.hs
--- a/NN/Examples/AlexNet.hs
+++ b/NN/Examples/AlexNet.hs
@@ -1,4 +1,5 @@
-module NN.Examples.AlexNet where
+{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
+module NN.Examples.AlexNet(alexNetSmall, alexNet, main) where
 
 import           Control.Lens
 import           Control.Monad
@@ -24,11 +25,13 @@
 conv4 = alexConv & numOutputC' 384 & padC' 1 & kernelSizeC' 3 & groupC' 2 & biasFillerC' (constant 0.1)
 conv5 = alexConv & numOutputC' 256 & padC' 1 & kernelSizeC' 3 & groupC' 2 & biasFillerC' (constant 0.1)
 
+alexNetSmall :: NetBuilder
 alexNetSmall = do
   (input', representation) <- sequential [conv1, relu, alexPool & strideP' 3]
   forM_ [alexTrain, alexTest] $ attach (To input')
   forM_ [accuracy 1, accuracy 5, softmax] $ attach (From representation)
 
+alexNet :: NetBuilder
 alexNet = do
   -- Set up the model
   (input', representation) <-
@@ -47,4 +50,5 @@
   forM_ [alexTrain, alexTest] $ attach (To input')
   forM_ [accuracy 1, accuracy 5, softmax] $ attach (From representation)
 
+main :: IO ()
 main = cli alexNet
diff --git a/NN/Examples/Demo.hs b/NN/Examples/Demo.hs
--- a/NN/Examples/Demo.hs
+++ b/NN/Examples/Demo.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedStrings #-}
-module NN.Examples.Demo where
+module NN.Examples.Demo(NN.Examples.Demo.main) where
 
 import           Gen.Caffe.LayerParameter as LP
 import           Gen.Caffe.NetParameter   as NP
@@ -35,9 +35,9 @@
   _ <- system $ printf "open %s &" f
   return ()
 
-visualizeGoogLeNetDensity :: IO ()
-visualizeGoogLeNetDensity = do
-  (file, handle) <- openTempFile "/tmp" "graph.pdf"
+visualizeGoogLeNetScaled :: IO ()
+visualizeGoogLeNetScaled = do
+  (file, handle) <- openTempFile "/tmp" "graphScaled.pdf"
   hClose handle
   f <- parse googLeNet & visualizeWith (scaled downscaleReLU) & pdf file
   _ <- system $ printf "open %s &" f
@@ -47,3 +47,10 @@
             where
               go ReLU = 1
               go _ = 2
+
+main :: IO ()
+main = do
+  torch
+  caffe
+  visualizeGoogLeNet
+  visualizeGoogLeNetScaled
diff --git a/NN/Examples/GoogLeNet.hs b/NN/Examples/GoogLeNet.hs
--- a/NN/Examples/GoogLeNet.hs
+++ b/NN/Examples/GoogLeNet.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE RecordWildCards #-}
-module NN.Examples.GoogLeNet where
+{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
+module NN.Examples.GoogLeNet(googLeNet, main) where
 
 import           Gen.Caffe.FillerParameter       as FP
 import           Gen.Caffe.InnerProductParameter as IP
@@ -62,6 +63,7 @@
 -- What to do at each step in the inner column?
 data ColumnStep = I Inception | Classifier | MaxPool
 
+googLeNet :: NetBuilder
 googLeNet = do
   (input, initial) <- sequential [conv1, relu, googlePool, googleLRN, conv2, relu, googleLRN, googlePool]
 
diff --git a/NN/Examples/ImageNet.hs b/NN/Examples/ImageNet.hs
--- a/NN/Examples/ImageNet.hs
+++ b/NN/Examples/ImageNet.hs
@@ -1,8 +1,8 @@
 module NN.Examples.ImageNet(test, train) where
 
-import           Gen.Caffe.DataParameter.DB as DP
-
 import           Control.Lens
+import           Gen.Caffe.DataParameter.DB as DP
+import           Gen.Caffe.Phase            as P
 
 import           NN.DSL
 
diff --git a/NN/Passes.hs b/NN/Passes.hs
--- a/NN/Passes.hs
+++ b/NN/Passes.hs
@@ -1,86 +1,21 @@
-module NN.Passes(module NN.Passes) where
+module NN.Passes(parse, optimizeWith, Pass)  where
 
+import           Gen.Caffe.LayerParameter   as LP
 import           NN.DSL
 import           NN.Graph
 
-import           Gen.Caffe.LayerParameter   as LP
-
-import           Control.Lens
 import           Control.Monad.State.Strict
-import           Data.Char
-import qualified Data.Foldable              as F
-import           Data.Graph.Inductive.Graph hiding ((&))
 import qualified Data.Graph.Inductive.Graph as G
-import           Data.Maybe
-import qualified Data.Sequence              as S
 
-import           Text.Printf
-import           Text.ProtocolBuffers       as P
-
 type Pass = (Net, Node, LayerParameter) -> LayerParameter
 
-layerName :: LayerParameter -> Int -> Utf8
-layerName l i = printf "%s_%d" (type' l & fromJust & toString & map toLower) i & s
-
 runPass :: Net -> Pass -> Net
-runPass gr pass = gmap run gr
+runPass gr pass = G.gmap run gr
     where
       run (_pre, i, lp, _suc) = (_pre, i, pass (gr, i, lp), _suc)
 
-addLabels :: Pass
-addLabels (_, _, lp) = update (layerTy lp)
-    where
-      update Data = lp & LP._top <>~ S.singleton (s "label")
-      update SoftmaxWithLoss = lp & LP._bottom <>~ S.singleton (s "label")
-      update Accuracy = lp & LP._bottom <>~ S.singleton (s "label")
-      update _ = lp
-
--- |If our layerTy is the given layer that is performed in-place, then
--- update `top` to point to `bottom`.
--- If any of our parents are performed in-place, update `bottom` to
--- point to our parents `top`
-optimizeInPlaceLayer :: LayerTy -> [Pass]
-optimizeInPlaceLayer layerTy' = [updateIfInPlace, updateIfParentInPlace] where
-    inPlace lp = layerTy lp == layerTy'
-    inPlaceParents gr i = filter inPlace . map fst $ pres gr i
-
-    updateIfInPlace (_, i, lp) =
-        case (layerTy lp == layerTy', F.toList (top lp)) of
-          (True, [_]) -> lp & LP._top .~ bottom lp
-          (True, _) -> error $ printf "Can only have one output for an in-place layer" ++ show (layerName lp i)
-          (False, _) -> lp
-
-    updateIfParentInPlace :: Pass
-    updateIfParentInPlace (gr, i, lp) =
-        case updateFromParents (gr, i, lp) of
-          Left e -> error e
-          Right lp' -> lp'
-
-    updateFromParents :: (Net, Node, LayerParameter) -> Either String LayerParameter
-    updateFromParents (gr, i, lp) =
-       case (inPlaceParents gr i, F.toList (bottom lp)) of
-         ([], _) -> Right lp
-         (parents, bottoms) ->
-             -- TODO this is super dodgy and incorrect in the general
-             -- case (there are some weird invariants we rely on), but it works for now.
-             if length parents /= length bottoms
-             then Left $ printf "Must have all parents in-place for in-place optimizations" ++ show (layerName lp i)
-             else let parentTops = F.concatMap (F.toList . LP.top) parents in
-                  if length parentTops == length ((F.toList . LP.bottom) lp)
-                  then Right $ lp & LP._bottom .~ S.fromList parentTops
-                  else Left $ error "asdf"
-
-labelled gr = map (\ j -> (lab' (context gr j), j))
-pres gr j = labelled gr (G.pre gr j)
-
-addConnection :: Pass
-addConnection (gr, i, lp) = lp
-                            & LP._name ?~ layerName lp i
-                            & LP._bottom .~ S.fromList (map (uncurry layerName) (pres gr i))
-                            & LP._top <>~ S.singleton (layerName lp i)
-
 optimizeWith :: [Pass] -> Net -> Net
 optimizeWith passes gr = foldl runPass gr passes
 
 parse :: G a b -> Gr a ()
-parse g = snd (execState g (1, empty))
+parse g = snd (execState g (1, G.empty))
diff --git a/NN/Visualize.hs b/NN/Visualize.hs
--- a/NN/Visualize.hs
+++ b/NN/Visualize.hs
@@ -1,16 +1,18 @@
 {-# LANGUAGE OverloadedStrings #-}
-module NN.Visualize where
+module NN.Visualize(visualize, visualizeWith, png, pdf, scaled) where
 
 import           Data.GraphViz
 import           Data.GraphViz.Attributes.Colors.Brewer
 import           Data.GraphViz.Attributes.Complete
 import qualified Data.Text.Lazy                         as L
+import           Gen.Caffe.LayerParameter               as LP
 
 import           Data.Graph.Inductive.Graph
 import           NN.DSL
 
 type NetVizParams = GraphvizParams Node LayerParameter () () LayerParameter
 
+defaultNNParams :: NetVizParams
 defaultNNParams =
     nonClusteredParams {
   -- Let's visualize neural networks from the bottom up
diff --git a/caffegraph.cabal b/caffegraph.cabal
--- a/caffegraph.cabal
+++ b/caffegraph.cabal
@@ -1,6 +1,6 @@
 name:                caffegraph
-version:             0.1.0.0
-synopsis:            A compiler for building, optimizing, visualizing, and generating (Caffe/Torch) DNNs
+version:             0.1.0.1
+description:         A compiler for building, optimizing, visualizing, and generating (Caffe/Torch) DNNs
 license:             BSD3
 license-file:        LICENSE
 author:              Andrew Tulloch
@@ -15,10 +15,83 @@
   location: https://github.com/ajtulloch/caffegraph/
 
 Library
-  GHC-Options: -Wall -fno-warn-missing-signatures
+  GHC-Options: -Wall
   Hs-Source-Dirs: .
-  exposed-modules: NN, NN.CLI, NN.DSL, NN.Graph, NN.Passes, NN.Visualize, NN.Backend.Caffe, NN.Backend.Torch
-                   NN.Examples.ImageNet, NN.Examples.AlexNet, NN.Examples.GoogLeNet, NN.Examples.Demo
+  exposed-modules: NN, 
+                   NN.CLI, 
+                   NN.DSL, 
+                   NN.Graph, 
+                   NN.Passes, 
+                   NN.Visualize, 
+                   NN.Backend.Caffe, 
+                   NN.Backend.Torch
+                   NN.Examples.ImageNet, 
+                   NN.Examples.AlexNet, 
+                   NN.Examples.GoogLeNet, 
+                   NN.Examples.Demo,
+                   Gen.Caffe.AccuracyParameter,
+                   Gen.Caffe.ArgMaxParameter,
+                   Gen.Caffe.BlobProto,
+                   Gen.Caffe.BlobProtoVector,
+                   Gen.Caffe.ConcatParameter,
+                   Gen.Caffe.ContrastiveLossParameter,
+                   Gen.Caffe.ConvolutionParameter.Engine,
+                   Gen.Caffe.ConvolutionParameter,
+                   Gen.Caffe.DataParameter.DB,
+                   Gen.Caffe.DataParameter,
+                   Gen.Caffe.Datum,
+                   Gen.Caffe.DropoutParameter,
+                   Gen.Caffe.DummyDataParameter,
+                   Gen.Caffe.EltwiseParameter.EltwiseOp,
+                   Gen.Caffe.EltwiseParameter,
+                   Gen.Caffe.ExpParameter,
+                   Gen.Caffe.FillerParameter,
+                   Gen.Caffe.HDF5DataParameter,
+                   Gen.Caffe.HDF5OutputParameter,
+                   Gen.Caffe.HingeLossParameter.Norm,
+                   Gen.Caffe.HingeLossParameter,
+                   Gen.Caffe.ImageDataParameter,
+                   Gen.Caffe.InfogainLossParameter,
+                   Gen.Caffe.InnerProductParameter,
+                   Gen.Caffe.LayerParameter,
+                   Gen.Caffe.LossParameter,
+                   Gen.Caffe.LRNParameter.NormRegion,
+                   Gen.Caffe.LRNParameter,
+                   Gen.Caffe.MemoryDataParameter,
+                   Gen.Caffe.MVNParameter,
+                   Gen.Caffe.NetParameter,
+                   Gen.Caffe.NetState,
+                   Gen.Caffe.NetStateRule,
+                   Gen.Caffe.ParamSpec.DimCheckMode,
+                   Gen.Caffe.ParamSpec,
+                   Gen.Caffe.Phase,
+                   Gen.Caffe.PoolingParameter.Engine,
+                   Gen.Caffe.PoolingParameter.PoolMethod,
+                   Gen.Caffe.PoolingParameter,
+                   Gen.Caffe.PowerParameter,
+                   Gen.Caffe.ReLUParameter.Engine,
+                   Gen.Caffe.ReLUParameter,
+                   Gen.Caffe.SigmoidParameter.Engine,
+                   Gen.Caffe.SigmoidParameter,
+                   Gen.Caffe.SliceParameter,
+                   Gen.Caffe.SoftmaxParameter.Engine,
+                   Gen.Caffe.SoftmaxParameter,
+                   Gen.Caffe.SolverParameter.SolverMode,
+                   Gen.Caffe.SolverParameter.SolverType,
+                   Gen.Caffe.SolverParameter,
+                   Gen.Caffe.SolverState,
+                   Gen.Caffe.TanHParameter.Engine,
+                   Gen.Caffe.TanHParameter,
+                   Gen.Caffe.ThresholdParameter,
+                   Gen.Caffe.TransformationParameter,
+                   Gen.Caffe.V0LayerParameter.PoolMethod,
+                   Gen.Caffe.V0LayerParameter,
+                   Gen.Caffe.V1LayerParameter.DimCheckMode,
+                   Gen.Caffe.V1LayerParameter.LayerType,
+                   Gen.Caffe.V1LayerParameter,
+                   Gen.Caffe.WindowDataParameter,
+                   Gen.Caffe
+
   build-depends:       base >=4.7 && <4.8
                      , bytestring
                      , containers
