import tensorflow as tf
tf.__version__
'2.7.4'
from tensorflow.keras import datasets
mnist = datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
print(f'x_train shape: {x_train.shape}, type: {type(x_train)}, dtype: {x_train.dtype}')
x_train shape: (60000, 28, 28), type: <class'numpy.ndarray'>, dtype: float64
维度扩张,可以使用如下的 np.expand_dims
, 也可以使用 x_train[..., tf.newaxis]
.
import numpy as np
x_train = np.expand_dims(x_train, axis=-1).astype('float32')
x_test = np.expand_dims(x_test, axis=-1).astype('float32')
print(f'x_train shape: {x_train.shape}, type: {type(x_train)}, dtype: {x_train.dtype}')
x_train shape: (60000, 28, 28, 1), type: <class'numpy.ndarray'>, dtype: float32
train_ds = tf.data.Dataset.from_tensor_slices((x_train,y_train)).shuffle(10000).batch(32)
test_ds = tf.data.Dataset.from_tensor_slices((x_test,y_test)).batch(32)
2023-10-16 18:36:56.261151: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags. 2023-10-16 18:36:56.294774: W tensorflow/core/framework/cpu_allocator_impl.cc:82] Allocation of 188160000 exceeds 10% of free system memory.
from tensorflow.keras import Model
class MyModel(Model):
def __init__(self):
super(MyModel, self).__init__()
self.conv1 = layers.Conv2D(32, 3, activation=activations.relu)
self.flatten = layers.Flatten()
self.d1 = layers.Dense(128, activation=activations.relu)
self.d2 = layers.Dense(10)
def call(self, x):
x = self.conv1(x)
x = self.flatten(x)
x = self.d1(x)
return self.d2(x)
model = Model()
from tensorflow.keras import layers, activations
?layers.Conv2D
Init signature: layers.Conv2D(*args, **kwargs) Docstring: 2D convolution layer (e.g. spatial convolution over images).This layer creates a convolution kernel that is convolved with the layer input to produce a tensor of outputs. If
use_bias
is True, a bias vector is created and added to the outputs. Finally, ifactivation
is notNone
, it is applied to the outputs as well.When using this layer as the first layer in a model, provide the keyword argument
input_shape
(tuple of integers orNone
, does not include the sample axis), e.g.input_shape=(128, 128, 3)
for 128x128 RGB pictures indata_format="channels_last"
. You can useNone
when a dimension has variable size.Examples:
>>> # The inputs are 28x28 RGB images with
channels_last
and the batch >>> # size is 4. >>> input_shape = (4, 28, 28, 3) >>> x = tf.random.normal(input_shape) >>> y = tf.keras.layers.Conv2D( … 2, 3, activation=’relu’, input_shape=input_shape[1:])(x) >>> print(y.shape) (4, 26, 26, 2)>>> # With
dilation_rate
as 2. >>> input_shape = (4, 28, 28, 3) >>> x = tf.random.normal(input_shape) >>> y = tf.keras.layers.Conv2D( … 2, 3, activation=’relu’, dilation_rate=2, input_shape=input_shape[1:])(x) >>> print(y.shape) (4, 24, 24, 2)>>> # With
padding
as “same”. >>> input_shape = (4, 28, 28, 3) >>> x = tf.random.normal(input_shape) >>> y = tf.keras.layers.Conv2D( … 2, 3, activation=’relu’, padding=”same”, input_shape=input_shape[1:])(x) >>> print(y.shape) (4, 28, 28, 2)>>> # With extended batch shape [4, 7]: >>> input_shape = (4, 7, 28, 28, 3) >>> x = tf.random.normal(input_shape) >>> y = tf.keras.layers.Conv2D( … 2, 3, activation=’relu’, input_shape=input_shape[2:])(x) >>> print(y.shape) (4, 7, 26, 26, 2)
Args: filters: Integer, the dimensionality of the output space (i.e. the number of output filters in the convolution). kernel_size: An integer or tuple/list of 2 integers, specifying the height and width of the 2D convolution window. Can be a single integer to specify the same value for all spatial dimensions. strides: An integer or tuple/list of 2 integers, specifying the strides of the convolution along the height and width. Can be a single integer to specify the same value for all spatial dimensions. Specifying any stride value!= 1 is incompatible with specifying any
dilation_rate
value!= 1. padding: one of"valid"
or"same"
(case-insensitive)."valid"
means no padding."same"
results in padding with zeros evenly to the left/right or up/down of the input. Whenpadding="same"
andstrides=1
, the output has the same size as the input. data_format: A string, one ofchannels_last
(default) orchannels_first
. The ordering of the dimensions in the inputs.channels_last
corresponds to inputs with shape(batch_size, height, width, channels)
whilechannels_first
corresponds to inputs with shape(batch_size, channels, height, width)
. It defaults to theimage_data_format
value found in your Keras config file at~/.keras/keras.json
. If you never set it, then it will bechannels_last
. dilation_rate: an integer or tuple/list of 2 integers, specifying the dilation rate to use for dilated convolution. Can be a single integer to specify the same value for all spatial dimensions. Currently, specifying anydilation_rate
value!= 1 is incompatible with specifying any stride value!= 1. groups: A positive integer specifying the number of groups in which the input is split along the channel axis. Each group is convolved separately withfilters/ groups
filters. The output is the concatenation of all thegroups
results along the channel axis. Input channels andfilters
must both be divisible bygroups
. activation: Activation function to use. If you don’t specify anything, no activation is applied (seekeras.activations
). use_bias: Boolean, whether the layer uses a bias vector. kernel_initializer: Initializer for thekernel
weights matrix (seekeras.initializers
). Defaults to ‘glorot_uniform’. bias_initializer: Initializer for the bias vector (seekeras.initializers
). Defaults to ‘zeros’. kernel_regularizer: Regularizer function applied to thekernel
weights matrix (seekeras.regularizers
). bias_regularizer: Regularizer function applied to the bias vector (seekeras.regularizers
). activity_regularizer: Regularizer function applied to the output of the layer (its “activation”) (seekeras.regularizers
). kernel_constraint: Constraint function applied to the kernel matrix (seekeras.constraints
). bias_constraint: Constraint function applied to the bias vector (seekeras.constraints
).Input shape: 4+D tensor with shape:
batch_shape + (channels, rows, cols)
ifdata_format='channels_first'
or 4+D tensor with shape:batch_shape + (rows, cols, channels)
ifdata_format='channels_last'
.Output shape: 4+D tensor with shape:
batch_shape + (filters, new_rows, new_cols)
ifdata_format='channels_first'
or 4+D tensor with shape:batch_shape + (new_rows, new_cols, filters)
ifdata_format='channels_last'
.rows
andcols
values might have changed due to padding.Returns: A tensor of rank 4+ representing
activation(conv2d(inputs, kernel) + bias)
.Raises: ValueError: if
padding
is"causal"
. ValueError: when bothstrides> 1
anddilation_rate> 1
. File: ~/venv/venv-py38-tf2/lib/python3.8/site-packages/keras/layers/convolutional.py Type: type Subclasses: Conv2DTranspose, Conv2D