1. 21 6月, 2016 4 次提交
    • A
      Add class descriptions for DNNClassifier and DNNRegressor, and minor · 6ae10aab
      A. Unique TensorFlower 提交于
      comment/reformat in examples.
      Change: 125374843
      6ae10aab
    • A
      Refactor Get2dOutputSizes/Get2dOutputSizesVerbose/Get3dOutputSizes to share a... · 84f4e8f3
      A. Unique TensorFlower 提交于
      Refactor Get2dOutputSizes/Get2dOutputSizesVerbose/Get3dOutputSizes to share a common 1-dimensional GetWindowedOutputSize/GetWindowedOutputSizeVerbose.
      
      The output sizes and padding of each dimension of a windowed operation (such as convolution or pooling) are orthogonal and can be computed independently. We can simplify the code by providing a 1D size computation and calling it for each dimension.
      
      Also remove special cases for 1x1 spatial convolutions in dimension calculations; they add complexity and are a case that the general code handles correctly.
      
      In general, 2D convolutions and their gradients have a lot of shape calculation code that is duplicated for each spatial dimension. This CL is a step in the direction of treating spatial dimensions the same so we can share more code.
      Change: 125360639
      84f4e8f3
    • S
      Added check for ALREADY_EXISTS such that we don't raise error. · 6a830d14
      Sherry Moore 提交于
      Change: 125359897
      6a830d14
    • D
      Actually fix the race condition for concurrent reading/writing of `tf.Graph`. · 91d65f6e
      Derek Murray 提交于
      This change should fix issues where (e.g.) a node is added after queue
      runners are started, and an error like `NotFoundError: FetchOutputs
      node input_producer_Dequeue:0: not found` is reported.
      
      The cause of the error was an incorrect multiple read of the
      `Graph.version` property. A graph has a `version` property that is
      (currently) defined to be the count of nodes in the graph. To keep the
      front-end and session graphs in sync, the `tf.Session` maintains a
      `_current_version` property, which is intended to be the last version
      at which the graph was synced to the backend (via
      TF_ExtendGraph). However, the logic was wrong in the face of
      concurrent writes to the graph:
      
      1. x = read `Session._current_version`.
      2. y = read `Session._graph.version`.
      3. If y > x:
         - Call `TF_ExtendGraph(Session._graph.as_graph_def(from_version=x))`
      4. z = read `Session._graph.version`.
      5. Set `Session._current_version` to z.
      
      Written this way, the race condition is clear: a node added after step
      3 and before step 4 would never be included in an TF_ExtendGraph call,
      and so would never be added to the graph.
      
      The fix involves returning the current graph version atomically with
      the GraphDef, using a new internal method called
      `Graph._as_graph_def()`. These are protected by the graph's mutex, to
      ensure that no node can be added between creating the GraphDef and
      reading the version.
      
      Fixes #2957.
      Change: 125356853
      91d65f6e
  2. 18 6月, 2016 16 次提交
  3. 17 6月, 2016 20 次提交