 
 (defn dropout
   "Bernoulli dropout where random (flat distribution) activations are zeroed out.
-Probability is the probability that an activation will survive so a probability of
-1 means no dropout while a probability of will zero out the activation vector."
-  [probability & args]
-  [(merge-args
-    {:type :dropout :distribution :bernoulli :probability probability}
-    args)])
+  Probability is the probability that an activation will survive so a probability of
+  1 means no dropout while a probability of will zero out the activation vector."
+  ([arg]
+   (let [args (if (map? arg)
+                arg
+                {:probability arg})]
+     (assert (:probability args))
+     [(assoc args :type :dropout :distribution :bernoulli)]))
+  ([probability & args]
+   [(merge-args
+     {:type :dropout :distribution :bernoulli :probability probability}
+     args)]))
 
 
 (defn multiplicative-dropout
   "Gaussian dropout where the activation vector is multiplied by a gaussian
-vector centered around (1,variance).  Note that this means the variance
-argument has an opposite effect of traditional dropout's probability in that
-a variance of 1 is actually quite a lot of variance and a variance of 0 means
-no change to the input."
-  [variance & args]
-  [(merge-args
-    {:type :dropout :distribution :gaussian :variance variance}
-    args)])
+  vector centered around (1,variance).  Note that this means the variance
+  argument has an opposite effect of traditional dropout's probability in that
+  a variance of 1 is actually quite a lot of variance and a variance of 0 means
+  no change to the input."
+  ([arg]
+   (let [args (if (map? arg)
+                arg
+                {:variance arg})]
+     (assert (:variance args))
+     [(assoc args
+             :type :dropout
+             :ditribution :gaussian)]))
+  ([variance & args]
+   [(merge-args
+     {:type :dropout :distribution :gaussian :variance variance}
+     args)]))
 
 
 (defmethod graph/get-node-metadata :dropout

                      {:possible-operation-set #{:max :avg :avg-exc-pad}
                       :pool-op (get retval :pool-op)})))
    [retval]))


(defmethod graph/build-node :max-pooling



(defn max-pooling
    "Max pooling with one of three possible pooling operations (:pool-op):
:max - default, take the max excluding padding.
:avg - Take the average including padding.
:avg-exc-pad - Take the average excluding padding."
  ([{:keys [kernel-dim pad stride ceil] :as args}]
   (assert (and kernel-dim pad stride))
   (let [retval (-> (apply convolutional-type-layer :max-pooling
                          kernel-dim kernel-dim pad pad
                          stride stride 0 :ceil (flatten (seq args)))
                   (#(if (contains? % :pool-op)
                       %
                       (assoc % :pool-op :max))))]
