Update backend strings (#7214)

Esse commit está contido em:
Taehoon Lee
2017-07-06 20:27:07 +09:00
commit de François Chollet
commit 205c61178d
8 arquivos alterados com 24 adições e 24 exclusões
+2 -2
Ver Arquivo
@@ -16,7 +16,7 @@ This is equivalent to:
model.add(Dense(64, activation='tanh')) model.add(Dense(64, activation='tanh'))
``` ```
You can also pass an element-wise Tensorflow/Theano function as an activation: You can also pass an element-wise TensorFlow/Theano/CNTK function as an activation:
```python ```python
from keras import backend as K from keras import backend as K
@@ -31,4 +31,4 @@ model.add(Activation(K.tanh))
## On "Advanced Activations" ## On "Advanced Activations"
Activations that are more complex than a simple Tensorflow/Theano function (eg. learnable activations, which maintain a state) are available as [Advanced Activation layers](layers/advanced-activations.md), and can be found in the module `keras.layers.advanced_activations`. These include `PReLU` and `LeakyReLU`. Activations that are more complex than a simple TensorFlow/Theano/CNTK function (eg. learnable activations, which maintain a state) are available as [Advanced Activation layers](layers/advanced-activations.md), and can be found in the module `keras.layers.advanced_activations`. These include `PReLU` and `LeakyReLU`.
+2 -2
Ver Arquivo
@@ -42,7 +42,7 @@ the 100 % MobileNet on various input sizes:
------------------------------------------------------------------------ ------------------------------------------------------------------------
The weights for all 16 models are obtained and translated The weights for all 16 models are obtained and translated
from Tensorflow checkpoints found at from TensorFlow checkpoints found at
https://github.com/tensorflow/models/blob/master/slim/nets/mobilenet_v1.md https://github.com/tensorflow/models/blob/master/slim/nets/mobilenet_v1.md
# Reference # Reference
@@ -364,7 +364,7 @@ def MobileNet(input_shape=None,
""" """
if K.backend() != 'tensorflow': if K.backend() != 'tensorflow':
raise RuntimeError('Only Tensorflow backend is currently supported, ' raise RuntimeError('Only TensorFlow backend is currently supported, '
'as other backends do not support ' 'as other backends do not support '
'depthwise convolution.') 'depthwise convolution.')
+7 -7
Ver Arquivo
@@ -374,10 +374,10 @@ def is_keras_tensor(x):
```python ```python
>>> from keras import backend as K >>> from keras import backend as K
>>> np_var = numpy.array([1, 2]) >>> np_var = numpy.array([1, 2])
>>> K.is_keras_tensor(np_var) # A numpy array is not a symbolic yensor. >>> K.is_keras_tensor(np_var) # A numpy array is not a symbolic tensor.
ValueError ValueError
>>> k_var = tf.placeholder('float32', shape=(1,1)) >>> k_var = tf.placeholder('float32', shape=(1,1))
>>> K.is_keras_tensor(k_var) # A variable created directly from tensorflow/theano is not a Keras tensor. >>> K.is_keras_tensor(k_var) # A variable indirectly created outside of keras is not a Keras tensor.
False False
>>> keras_var = K.variable(np_var) >>> keras_var = K.variable(np_var)
>>> K.is_keras_tensor(keras_var) # A variable created with the keras backend is a Keras tensor. >>> K.is_keras_tensor(keras_var) # A variable created with the keras backend is a Keras tensor.
@@ -2287,7 +2287,7 @@ def function(inputs, outputs, updates=None, **kwargs):
if kwargs: if kwargs:
for key in kwargs: for key in kwargs:
if not (has_arg(tf.Session.run, key, True) or has_arg(Function.__init__, key, True)): if not (has_arg(tf.Session.run, key, True) or has_arg(Function.__init__, key, True)):
msg = 'Invalid argument "%s" passed to K.function with Tensorflow backend' % key msg = 'Invalid argument "%s" passed to K.function with TensorFlow backend' % key
raise ValueError(msg) raise ValueError(msg)
return Function(inputs, outputs, updates=updates, **kwargs) return Function(inputs, outputs, updates=updates, **kwargs)
@@ -3127,7 +3127,7 @@ def conv2d(x, kernel, strides=(1, 1), padding='valid',
strides: strides tuple. strides: strides tuple.
padding: string, `"same"` or `"valid"`. padding: string, `"same"` or `"valid"`.
data_format: string, `"channels_last"` or `"channels_first"`. data_format: string, `"channels_last"` or `"channels_first"`.
Whether to use Theano or TensorFlow data format Whether to use Theano or TensorFlow/CNTK data format
for inputs/kernels/outputs. for inputs/kernels/outputs.
dilation_rate: tuple of 2 integers. dilation_rate: tuple of 2 integers.
@@ -3168,7 +3168,7 @@ def conv2d_transpose(x, kernel, output_shape, strides=(1, 1),
strides: strides tuple. strides: strides tuple.
padding: string, `"same"` or `"valid"`. padding: string, `"same"` or `"valid"`.
data_format: string, `"channels_last"` or `"channels_first"`. data_format: string, `"channels_last"` or `"channels_first"`.
Whether to use Theano or TensorFlow data format Whether to use Theano or TensorFlow/CNTK data format
for inputs/kernels/outputs. for inputs/kernels/outputs.
# Returns # Returns
@@ -3276,7 +3276,7 @@ def conv3d(x, kernel, strides=(1, 1, 1), padding='valid',
strides: strides tuple. strides: strides tuple.
padding: string, `"same"` or `"valid"`. padding: string, `"same"` or `"valid"`.
data_format: string, `"channels_last"` or `"channels_first"`. data_format: string, `"channels_last"` or `"channels_first"`.
Whether to use Theano or TensorFlow data format Whether to use Theano or TensorFlow/CNTK data format
for inputs/kernels/outputs. for inputs/kernels/outputs.
dilation_rate: tuple of 3 integers. dilation_rate: tuple of 3 integers.
@@ -3317,7 +3317,7 @@ def conv3d_transpose(x, kernel, output_shape, strides=(1, 1, 1),
strides: strides tuple. strides: strides tuple.
padding: string, "same" or "valid". padding: string, "same" or "valid".
data_format: string, `"channels_last"` or `"channels_first"`. data_format: string, `"channels_last"` or `"channels_first"`.
Whether to use Theano or TensorFlow data format Whether to use Theano or TensorFlow/CNTK data format
for inputs/kernels/outputs. for inputs/kernels/outputs.
# Returns # Returns
+4 -4
Ver Arquivo
@@ -1894,8 +1894,8 @@ def conv2d_transpose(x, kernel, output_shape, strides=(1, 1),
if padding == 'same' and kernel_shape[0] % 2 == 0: if padding == 'same' and kernel_shape[0] % 2 == 0:
raise ValueError('In `Conv2DTranspose`, with padding mode `same`, ' raise ValueError('In `Conv2DTranspose`, with padding mode `same`, '
'even kernel sizes are only supported with Tensorflow. ' 'even kernel sizes are not supported with Theano. '
'With Theano, set `kernel_size` to an odd number.') 'You can set `kernel_size` to an odd number.')
kernel_shape = _preprocess_conv2d_filter_shape(kernel_shape, data_format) kernel_shape = _preprocess_conv2d_filter_shape(kernel_shape, data_format)
@@ -2005,8 +2005,8 @@ def conv3d_transpose(x, kernel, output_shape, strides=(1, 1, 1),
if padding == 'same' and kernel_shape[0] % 2 == 0: if padding == 'same' and kernel_shape[0] % 2 == 0:
raise ValueError('In `Conv3DTranspose`, with padding mode `same`, ' raise ValueError('In `Conv3DTranspose`, with padding mode `same`, '
'even kernel sizes are only supported with Tensorflow. ' 'even kernel sizes are not supported with Theano. '
'With Theano, set `kernel_size` to an odd number.') 'You can set `kernel_size` to an odd number.')
kernel_shape = _preprocess_conv3d_filter_shape(kernel_shape, data_format) kernel_shape = _preprocess_conv3d_filter_shape(kernel_shape, data_format)
+2 -2
Ver Arquivo
@@ -637,8 +637,8 @@ class Model(Container):
If the model has multiple outputs, you can use a different If the model has multiple outputs, you can use a different
`sample_weight_mode` on each output by passing a `sample_weight_mode` on each output by passing a
dictionary or a list of modes. dictionary or a list of modes.
**kwargs: when using the Theano backend, these arguments **kwargs: when using the Theano/CNTK backends, these arguments
are passed into K.function. When using the Tensorflow backend, are passed into K.function. When using the TensorFlow backend,
these arguments are passed into `tf.Session.run`. these arguments are passed into `tf.Session.run`.
# Raises # Raises
+3 -3
Ver Arquivo
@@ -758,9 +758,9 @@ class Sequential(Model):
sample_weight_mode: if you need to do timestep-wise sample_weight_mode: if you need to do timestep-wise
sample weighting (2D weights), set this to "temporal". sample weighting (2D weights), set this to "temporal".
"None" defaults to sample-wise weights (1D). "None" defaults to sample-wise weights (1D).
**kwargs: for Theano backend, these are passed into K.function. **kwargs: for Theano/CNTK backends, these are passed into
When using the Tensorflow backend, these are passed into K.function. When using the TensorFlow backend, these are
`tf.Session.run`. passed into `tf.Session.run`.
# Example # Example
```python ```python
+3 -3
Ver Arquivo
@@ -171,7 +171,7 @@ def test_inceptionv3_pooling():
@keras_test @keras_test
@pytest.mark.skipif((K.backend() != 'tensorflow'), @pytest.mark.skipif((K.backend() != 'tensorflow'),
reason="MobileNets are supported only on Tensorflow") reason="MobileNets are supported only on TensorFlow")
def test_mobilenet(): def test_mobilenet():
model = applications.MobileNet(weights=None) model = applications.MobileNet(weights=None)
assert model.output_shape == (None, 1000) assert model.output_shape == (None, 1000)
@@ -179,7 +179,7 @@ def test_mobilenet():
@keras_test @keras_test
@pytest.mark.skipif((K.backend() != 'tensorflow'), @pytest.mark.skipif((K.backend() != 'tensorflow'),
reason="MobileNets are supported only on Tensorflow") reason="MobileNets are supported only on TensorFlow")
def test_mobilenet_no_top(): def test_mobilenet_no_top():
model = applications.MobileNet(weights=None, include_top=False) model = applications.MobileNet(weights=None, include_top=False)
assert model.output_shape == (None, None, None, 1024) assert model.output_shape == (None, None, None, 1024)
@@ -187,7 +187,7 @@ def test_mobilenet_no_top():
@keras_test @keras_test
@pytest.mark.skipif((K.backend() != 'tensorflow'), @pytest.mark.skipif((K.backend() != 'tensorflow'),
reason="MobileNets are supported only on Tensorflow") reason="MobileNets are supported only on TensorFlow")
def test_mobilenet_pooling(): def test_mobilenet_pooling():
model = applications.MobileNet(weights=None, include_top=False, pooling='avg') model = applications.MobileNet(weights=None, include_top=False, pooling='avg')
assert model.output_shape == (None, 1024) assert model.output_shape == (None, 1024)
+1 -1
Ver Arquivo
@@ -1396,7 +1396,7 @@ class TestBackend(object):
label_lens = np.expand_dims(np.asarray([5, 4]), 1) label_lens = np.expand_dims(np.asarray([5, 4]), 1)
input_lens = np.expand_dims(np.asarray([5, 5]), 1) # number of timesteps input_lens = np.expand_dims(np.asarray([5, 5]), 1) # number of timesteps
# the Theano and Tensorflow CTC code use different methods to ensure # the Theano and TensorFlow CTC code use different methods to ensure
# numerical stability. The Theano code subtracts out the max # numerical stability. The Theano code subtracts out the max
# before the final log, so the results are different but scale # before the final log, so the results are different but scale
# identically and still train properly # identically and still train properly