TensorFlow.js 层与网络 #
层概述 #
层是神经网络的基本构建块,每一层接收输入、进行变换、产生输出。
text
┌─────────────────────────────────────────────────────────────┐
│ 层的类型 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 核心层 │ │ 卷积层 │ │ 循环层 │ │
│ │ Dense │ │ Conv2D │ │ LSTM │ │
│ │ Dropout │ │ Conv1D │ │ GRU │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 池化层 │ │ 正则化层 │ │ 嵌入层 │ │
│ │ MaxPool │ │ BatchNorm │ │ Embedding │ │
│ │ AvgPool │ │ LayerNorm │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
核心层 #
Dense(全连接层) #
最常用的层,每个输入节点与每个输出节点相连。
javascript
const dense = tf.layers.dense({
units: 64,
activation: 'relu',
useBias: true,
kernelInitializer: 'glorotNormal',
biasInitializer: 'zeros',
kernelRegularizer: tf.regularizers.l2({ l2: 0.01 }),
inputShape: [10]
});
参数说明 #
| 参数 | 说明 | 默认值 |
|---|---|---|
| units | 输出维度 | 必填 |
| activation | 激活函数 | linear |
| useBias | 是否使用偏置 | true |
| kernelInitializer | 权重初始化 | glorotNormal |
| biasInitializer | 偏置初始化 | zeros |
激活函数 #
javascript
tf.layers.dense({ units: 64, activation: 'relu' });
tf.layers.dense({ units: 64, activation: 'sigmoid' });
tf.layers.dense({ units: 64, activation: 'tanh' });
tf.layers.dense({ units: 64, activation: 'softmax' });
tf.layers.dense({ units: 64, activation: 'elu' });
tf.layers.dense({ units: 64, activation: 'selu' });
tf.layers.dense({ units: 64, activation: 'linear' });
Activation(激活层) #
单独的激活函数层。
javascript
tf.layers.activation({ activation: 'relu' });
tf.layers.activation({ activation: 'softmax' });
Dropout(丢弃层) #
随机丢弃部分神经元,防止过拟合。
javascript
const dropout = tf.layers.dropout({
rate: 0.5,
noiseShape: null,
seed: null
});
使用示例 #
javascript
const model = tf.sequential();
model.add(tf.layers.dense({ units: 128, inputShape: [784], activation: 'relu' }));
model.add(tf.layers.dropout({ rate: 0.5 }));
model.add(tf.layers.dense({ units: 64, activation: 'relu' }));
model.add(tf.layers.dropout({ rate: 0.3 }));
model.add(tf.layers.dense({ units: 10, activation: 'softmax' }));
Flatten(展平层) #
将多维输入展平为一维。
javascript
const flatten = tf.layers.flatten({
inputShape: [28, 28, 1]
});
Reshape(重塑层) #
改变输入的形状。
javascript
const reshape = tf.layers.reshape({
targetShape: [7, 7, 64]
});
Permute(置换层) #
置换输入的维度顺序。
javascript
const permute = tf.layers.permute({
dims: [2, 1, 3]
});
RepeatVector(重复向量层) #
重复输入 n 次。
javascript
const repeat = tf.layers.repeatVector({
n: 3
});
卷积层 #
Conv2D(二维卷积) #
用于图像处理。
javascript
const conv2d = tf.layers.conv2d({
filters: 32,
kernelSize: 3,
strides: 1,
padding: 'same',
activation: 'relu',
inputShape: [28, 28, 1]
});
参数说明 #
| 参数 | 说明 | 默认值 |
|---|---|---|
| filters | 卷积核数量 | 必填 |
| kernelSize | 卷积核大小 | 必填 |
| strides | 步长 | 1 |
| padding | 填充方式 | valid |
| activation | 激活函数 | linear |
padding 选项 #
javascript
tf.layers.conv2d({ padding: 'valid' });
tf.layers.conv2d({ padding: 'same' });
Conv1D(一维卷积) #
用于序列处理。
javascript
const conv1d = tf.layers.conv1d({
filters: 64,
kernelSize: 3,
strides: 1,
padding: 'same',
activation: 'relu',
inputShape: [100, 1]
});
Conv2DTranspose(转置卷积) #
用于上采样。
javascript
const conv2dTranspose = tf.layers.conv2dTranspose({
filters: 32,
kernelSize: 3,
strides: 2,
padding: 'same',
inputShape: [7, 7, 128]
});
SeparableConv2D(深度可分离卷积) #
更高效的卷积方式。
javascript
const separableConv = tf.layers.separableConv2d({
filters: 32,
kernelSize: 3,
depthMultiplier: 1,
padding: 'same',
inputShape: [28, 28, 3]
});
池化层 #
MaxPooling2D(最大池化) #
javascript
const maxPool = tf.layers.maxPooling2d({
poolSize: 2,
strides: 2,
padding: 'valid'
});
AveragePooling2D(平均池化) #
javascript
const avgPool = tf.layers.averagePooling2d({
poolSize: 2,
strides: 2,
padding: 'valid'
});
GlobalMaxPooling2D(全局最大池化) #
javascript
const globalMaxPool = tf.layers.globalMaxPooling2d();
GlobalAveragePooling2D(全局平均池化) #
javascript
const globalAvgPool = tf.layers.globalAveragePooling2d();
一维池化 #
javascript
const maxPool1d = tf.layers.maxPooling1d({
poolSize: 2,
strides: 2
});
const avgPool1d = tf.layers.averagePooling1d({
poolSize: 2,
strides: 2
});
循环层 #
LSTM(长短期记忆网络) #
javascript
const lstm = tf.layers.lstm({
units: 128,
returnSequences: true,
returnState: false,
inputShape: [10, 32]
});
参数说明 #
| 参数 | 说明 | 默认值 |
|---|---|---|
| units | 输出维度 | 必填 |
| returnSequences | 是否返回完整序列 | false |
| returnState | 是否返回状态 | false |
| activation | 激活函数 | tanh |
| recurrentActivation | 循环激活函数 | sigmoid |
GRU(门控循环单元) #
javascript
const gru = tf.layers.gru({
units: 128,
returnSequences: true,
inputShape: [10, 32]
});
SimpleRNN(简单循环神经网络) #
javascript
const rnn = tf.layers.simpleRNN({
units: 64,
returnSequences: false,
inputShape: [10, 32]
});
Bidirectional(双向包装器) #
javascript
const bidirectional = tf.layers.bidirectional({
layer: tf.layers.lstm({ units: 64 }),
mergeMode: 'concat'
});
使用示例 #
javascript
const model = tf.sequential();
model.add(tf.layers.lstm({
units: 64,
returnSequences: true,
inputShape: [10, 32]
}));
model.add(tf.layers.lstm({
units: 32,
returnSequences: false
}));
model.add(tf.layers.dense({ units: 10, activation: 'softmax' }));
正则化层 #
BatchNormalization(批归一化) #
javascript
const batchNorm = tf.layers.batchNormalization({
axis: -1,
momentum: 0.99,
epsilon: 0.001,
center: true,
scale: true
});
LayerNormalization(层归一化) #
javascript
const layerNorm = tf.layers.layerNormalization({
axis: -1,
epsilon: 0.001,
center: true,
scale: true
});
使用示例 #
javascript
const model = tf.sequential();
model.add(tf.layers.dense({ units: 128, inputShape: [784] }));
model.add(tf.layers.batchNormalization());
model.add(tf.layers.activation({ activation: 'relu' }));
model.add(tf.layers.dense({ units: 64 }));
model.add(tf.layers.batchNormalization());
model.add(tf.layers.activation({ activation: 'relu' }));
model.add(tf.layers.dense({ units: 10, activation: 'softmax' }));
嵌入层 #
Embedding(嵌入层) #
将整数索引映射为稠密向量。
javascript
const embedding = tf.layers.embedding({
inputDim: 10000,
outputDim: 128,
inputLength: 100
});
使用示例 #
javascript
const model = tf.sequential();
model.add(tf.layers.embedding({
inputDim: 10000,
outputDim: 128,
inputLength: 100
}));
model.add(tf.layers.lstm({ units: 64 }));
model.add(tf.layers.dense({ units: 1, activation: 'sigmoid' }));
合并层 #
Concatenate(拼接) #
javascript
const concat = tf.layers.concatenate({ axis: -1 });
Add(相加) #
javascript
const add = tf.layers.add();
Subtract(相减) #
javascript
const subtract = tf.layers.subtract();
Multiply(相乘) #
javascript
const multiply = tf.layers.multiply();
Average(平均) #
javascript
const average = tf.layers.average();
Maximum(最大值) #
javascript
const maximum = tf.layers.maximum();
Minimum(最小值) #
javascript
const minimum = tf.layers.minimum();
Dot(点积) #
javascript
const dot = tf.layers.dot({ axes: -1 });
注意力层 #
Attention(注意力) #
javascript
const attention = tf.layers.attention({
useScale: true
});
MultiHeadAttention(多头注意力) #
javascript
const multiHead = tf.layers.multiHeadAttention({
numHeads: 8,
keyDim: 64
});
自定义层 #
创建自定义层 #
javascript
class CustomDense extends tf.layers.Layer {
constructor(units) {
super({});
this.units = units;
}
build(inputShape) {
this.kernel = this.addWeight(
'kernel',
[inputShape[1], this.units],
'float32',
tf.initializers.glorotNormal()
);
this.bias = this.addWeight(
'bias',
[this.units],
'float32',
tf.initializers.zeros()
);
}
call(inputs) {
return inputs.matMul(this.kernel.read()).add(this.bias.read());
}
static get className() {
return 'CustomDense';
}
}
tf.serialization.registerClass(CustomDense);
使用自定义层 #
javascript
const model = tf.sequential();
model.add(new CustomDense(64));
model.add(new CustomDense(10));
层配置最佳实践 #
权重初始化 #
javascript
tf.layers.dense({
units: 64,
kernelInitializer: 'glorotNormal',
biasInitializer: 'zeros'
});
tf.layers.dense({
units: 64,
kernelInitializer: 'heNormal'
});
tf.layers.dense({
units: 64,
kernelInitializer: tf.initializers.randomNormal({ mean: 0, stddev: 0.05 })
});
正则化 #
javascript
tf.layers.dense({
units: 64,
kernelRegularizer: tf.regularizers.l1({ l1: 0.01 }),
biasRegularizer: tf.regularizers.l2({ l2: 0.01 })
});
tf.layers.dense({
units: 64,
activityRegularizer: tf.regularizers.l1l2({ l1: 0.01, l2: 0.01 })
});
约束 #
javascript
tf.layers.dense({
units: 64,
kernelConstraint: tf.constraints.maxNorm({ maxValue: 2 })
});
常见网络架构 #
MLP(多层感知机) #
javascript
const mlp = tf.sequential({
layers: [
tf.layers.dense({ units: 128, inputShape: [784], activation: 'relu' }),
tf.layers.dropout({ rate: 0.5 }),
tf.layers.dense({ units: 64, activation: 'relu' }),
tf.layers.dropout({ rate: 0.3 }),
tf.layers.dense({ units: 10, activation: 'softmax' })
]
});
CNN(卷积神经网络) #
javascript
const cnn = tf.sequential({
layers: [
tf.layers.conv2d({ filters: 32, kernelSize: 3, activation: 'relu', inputShape: [28, 28, 1] }),
tf.layers.maxPooling2d({ poolSize: 2 }),
tf.layers.conv2d({ filters: 64, kernelSize: 3, activation: 'relu' }),
tf.layers.maxPooling2d({ poolSize: 2 }),
tf.layers.flatten(),
tf.layers.dense({ units: 128, activation: 'relu' }),
tf.layers.dense({ units: 10, activation: 'softmax' })
]
});
RNN(循环神经网络) #
javascript
const rnn = tf.sequential({
layers: [
tf.layers.embedding({ inputDim: 10000, outputDim: 128, inputLength: 100 }),
tf.layers.lstm({ units: 64, returnSequences: true }),
tf.layers.lstm({ units: 32 }),
tf.layers.dense({ units: 1, activation: 'sigmoid' })
]
});
下一步 #
现在你已经掌握了各种层的使用,接下来学习 模型训练,了解如何训练神经网络!
最后更新:2026-03-29