Guest User

Untitled

a guest
Nov 23rd, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. net = NetGraph[
  2. {
  3. 50,
  4. 50,
  5. CatenateLayer[],
  6. ReshapeLayer[{2, 50}],
  7. NetPairEmbeddingOperator[NetChain[{10, Ramp, 2(*embedding dimension*)}]],
  8. {2, SoftmaxLayer[]},
  9. {2, SoftmaxLayer[]},
  10. ContrastiveLossLayer[(*margin*)]
  11. },
  12. {
  13. NetPort["Input1"] -> 1 -> 6,
  14. NetPort["Input2"] -> 2 -> 7,
  15. {1, 2} -> 3 -> 4 -> 5 -> 8
  16. },
  17. "Input1" -> 10,
  18. "Input2" -> 10,
  19. "Output1" -> NetDecoder[{"Class", {0, 1}}],
  20. "Output2" -> NetDecoder[{"Class", {0, 1}}]
  21. ]
  22.  
  23. net = NetGraph[
  24. {
  25. 50,
  26. 50,
  27. CatenateLayer[],
  28. ReshapeLayer[{2, 50}],
  29. NetPairEmbeddingOperator[NetChain[{10, Ramp, 2(*embedding dimension*)}]],
  30. {2, SoftmaxLayer[]},
  31. {2, SoftmaxLayer[]},
  32. ContrastiveLossLayer[(*margin*)]
  33. },
  34. {
  35. NetPort["Input1"] -> 1 -> 6,
  36. NetPort["Input2"] -> 2 -> 7,
  37. {1, 2} -> 3 -> 4 -> 5 -> 8
  38. },
  39. "Input1" -> 10,
  40. "Input2" -> 10,
  41. "Output1" -> NetDecoder[{"Class", {0, 1}}],
  42. "Output2" -> NetDecoder[{"Class", {0, 1}}]
  43. ]
  44.  
  45. sampler[n_] := Block[
  46. {r},
  47. r = Table[RandomSample[Range[1000], 2], n];
  48. <|
  49. "Input1" -> X[[r[[;; , 1]]]],
  50. "Input2" -> X[[r[[;; , 2]]]],
  51. "Output1" -> Y[[r[[;; , 1]]]],
  52. "Output2" -> Y[[r[[;; , 2]]]],
  53. "Target" -> RandomChoice[{True, False}, n]
  54. |>
  55. ]
  56.  
  57. sampler[#BatchSize] &@<|"BatchSize" -> 2|>
  58. netT = NetTrain[net, sampler[#BatchSize] &, BatchSize -> 2, MaxTrainingRounds -> 50]
  59.  
  60. classifier = NetGraph[
  61. {
  62. Take[netT, {1, 6}],
  63. Take[netT, {2, 7}],
  64. ThreadingLayer[(#1 + #2)/2 &]
  65. },
  66. {
  67. {1, 2} -> 3
  68. },
  69. "Output" -> NetDecoder[{"Class", {0, 1}}]
  70. ]
  71.  
  72. classifier = NetGraph[
  73. {
  74. Take[netT, {1, 6}],
  75. Take[netT, {2, 7}],
  76. ThreadingLayer[(#1 + #2)/2 &]
  77. },
  78. {
  79. {1, 2} -> 3
  80. },
  81. "Output" -> NetDecoder[{"Class", {0, 1}}]
  82. ]
  83.  
  84. emb1 = NetChain[
  85. {
  86. Take[netT, {1, 1}],
  87. NetExtract[netT, 5][["Net"]]
  88. }
  89. ]
  90.  
  91. nf1 = Nearest[emb1@X -> Range[n]]
  92.  
  93. emb2 = NetChain[
  94. {
  95. Take[netT, {2, 2}],
  96. NetExtract[netT, 5][["Net"]]
  97. }
  98. ];
  99. nf2 = Nearest[emb2@X -> Range[n]];
  100.  
  101. SeedRandom[0];
  102. data = RandomReal[{-1, 1}, 10];
  103.  
  104. classifier[<|"Input1" -> data, "Input2" -> data|>, "Probabilities"]
  105.  
  106. {nf1[emb1@data, 5], nf2[emb2@data, 5]}
Add Comment
Please, Sign In to add comment