Tensorflow 2.* 网络训练(一) compile(optimizer, loss, metrics, loss_weights)

在搭建完网络以后,就需要配置模型训练的函数,比如损失函数、误差方向传播优化算法等。Tensorflow 2.* 中compile编译函数便集成了此项功能,比如对于一个分类问题,常见的形式如下:

model.compile(optimizer='rmsprop',
				loss='categorical_crossentropy',
				metrics=['accuracy'])

tf.keras.Model.compile()

optimizer 优化器

基于训练数据损失函数来更新网络的机制,常用的有Adam, RMSprop、SGD等

loss 损失函数

网络衡量在训练数据上的性能,即网络如何朝着正确的方向前进。
BinaryCrossentropy, CategoricalCrossentropy,KLDivergence等

metrics 监控指标

训练和测试过程中需要监控的指标。常用的有AUC、Accuracy、BinaryAccuracy、BinaryCrossentropy, CategoricalCrossentropy, KLDivergence、Precision等等

loss和metrics关系

  1. loss和metrics都是用来评价训练过程中模型的预测性能;
  2. optimizer是根据lo
  • 9
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个深度信念网络进行无监督学习的例子,使用tensorflow2.x: ```python import tensorflow as tf import numpy as np from tensorflow.keras.layers import Dense from tensorflow.keras.models import Sequential from tensorflow.keras.optimizers import Adam # 构建深度信念网络 class DBN(tf.keras.Model): def __init__(self, n_visible=784, n_hidden=[500, 500], n_classes=10): super(DBN, self).__init__() self.n_visible = n_visible self.n_hidden = n_hidden self.n_classes = n_classes # 构建可视层 self.visible_layer = Dense(n_visible, activation='relu') # 构建隐藏层 self.hidden_layers = [] for i, size in enumerate(n_hidden): self.hidden_layers.append(Dense(size, activation='relu', name=f'hidden_{i}')) # 构建分类器 self.classifier = Dense(n_classes, activation='softmax') def call(self, x): # 可视层 h = self.visible_layer(x) # 隐藏层 for layer in self.hidden_layers: h = layer(h) # 分类器 y = self.classifier(h) return y # MNIST数据集 (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() # 数据预处理 x_train = x_train.reshape(-1, 784).astype('float32') / 255.0 x_test = x_test.reshape(-1, 784).astype('float32') / 255.0 y_train = tf.keras.utils.to_categorical(y_train) y_test = tf.keras.utils.to_categorical(y_test) # 定义超参数 learning_rate = 0.01 batch_size = 64 epochs = 10 n_visible = 784 n_hidden = [500, 500] n_classes = 10 # 初始化深度信念网络 model = DBN(n_visible, n_hidden, n_classes) # 定义损失函数和优化器 loss_fn = tf.keras.losses.CategoricalCrossentropy() optimizer = Adam(learning_rate=learning_rate) # 进行无监督预训练 for i, layer in enumerate(model.hidden_layers): # 构建自编码器 autoencoder = Sequential([ Dense(n_hidden[i], input_shape=(n_hidden[i-1],), activation='relu', name=f'encoder_{i}'), Dense(n_hidden[i-1], activation='relu', name=f'decoder_{i}') ]) # 编译自编码器 autoencoder.compile(optimizer=optimizer, loss=loss_fn) # 获取前面的层的输出 encoder_input = tf.keras.Input(shape=(n_hidden[i-1],)) for j in range(i): encoder_input = model.hidden_layers[j](encoder_input) # 获取当前层的输入 encoder_output = layer(encoder_input) # 获取当前层的输出 decoder_output = autoencoder(encoder_output) # 训练自编码器 history = autoencoder.fit(encoder_output, encoder_input, batch_size=batch_size, epochs=epochs) # 更新当前层的权重 layer.set_weights(autoencoder.layers[0].get_weights()) # 进行有监督微调 model.compile(optimizer=optimizer, loss=loss_fn, metrics=['accuracy']) model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(x_test, y_test)) ``` 在这个例子中,我们首先定义了一个DBN类,它包含了可视层、隐藏层和分类器。然后,我们加载了MNIST数据集,将输入数据预处理为784维向量,并将标签数据转换为one-hot编码。接着,我们定义了超参数并初始化了深度信念网络。之后,我们进行了无监督预训练,对每一层的权重进行初始化。最后,我们进行了有监督微调,对整个网络进行训练

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值