:中国银婚结婚是多少年 国际市场上有没有一个说法是将夫妻婚后每一年的结婚结婚纪念日根据自己结婚的年限起一个别称,相信我们大家有听过金婚、银婚、钻石婚这样的别称,但是由于大家可以知道金婚银婚钻石婚各是多少年吗?相信他们很多人认为对于学习这些问题都不是太了解,但是学生对于社会很多人来说就是结婚纪念日是比较具有重要的,有的人会精心设计准备工作结婚纪念日,那么结婚纪念日怎么过呢?下面小编就为大家进行介绍金婚银婚钻石婚各是多少年,以及我国结婚纪念日怎么过的相关研究内容。     银婚金婚是如何每颗钻石的结婚纪念日长年累月  &...... Last article READ

深度学习的学习率调节实践

多层感知器多层感知器(MLP)是由一个输入层、一个或多个隐藏层和一个称为输出层的最终层组成的人工神经网络(ANN)。通常,靠近输入层的层称为较低层,靠近输出层的层称为外层,除输出层外的每一层都包含一个偏置神经元,并与下一层完全相连。当一个ANN包含一个很深的隐藏层时,它被称为深度神经网络(DNN)。

在本文中,我们将在MNIST数据集上训练一个深度MLP,并通过指数增长来寻找最佳学习率,绘制损失图,并找到损失增长的点,以达到85%以上的准确率。对于最佳的实践过程,我们将实现早期停止,保存检查点,并使用TensorBoard绘制学习曲线。你可以在这里查看jupyter Notebook:https://github.com/lukenew2/learning_rates_and_best_practices/blob/master/optimal_learning_rates_with_keras_api.ipynb指数学习率学习率可以说是最重要的超参数。一般情况下,最佳学习速率约为最大学习速率(即训练算法偏离的学习速率)的一半。找到一个好的学习率的一个方法是训练模型进行几百次迭代,从非常低的学习率(例如,1e-5)开始,逐渐增加到非常大的值(例如,10)。这是通过在每次迭代时将学习速率乘以一个常数因子来实现的。如果你将损失描绘为学习率的函数,你应该首先看到它在下降,但过一段时间后,学习率会变得很高,这时损失会迅速回升:最佳学习率将略低于转折点,然后你可以重新初始化你的模型,并使用此良好的学习率对其进行正常训练。Keras模型我们先导入相关库import osimport matplotlib.pyplot as pltimport numpy as npimport pandas as pd

PROJECT_ROOT_DIR = "."IMAGES_PATH = os.path.join(PROJECT_ROOT_DIR, "images")os.makedirs(IMAGES_PATH, exist_ok=True)

def save_fig(fig_id, tight_layout=True, fig_extension="png", resolution=300):    path = os.path.join(IMAGES_PATH, fig_id + "." + fig_extension)    print("Saving figure", fig_id)    if tight_layout:        plt.tight_layout()    plt.savefig(path, format=fig_extension, dpi=resolution)import tensorflow as tffrom tensorflow import keras接下来加载数据集(X_train, y_train), (X_test, y_test) = keras.datasets.fashion_mnist.load_data()

X_train.shape

X_train.dtype标准化像素X_valid, X_train = X_train[:5000] / 255.0, X_train[5000:] / 255.0y_valid, y_train = y_train[:5000], y_train[5000:] X_test = X_test / 255.0让我们快速看一下数据集中的图像样本,让我们感受一下分类任务的复杂性:class_names = ["T-shirt/top", "Trouser", "Pullover", "Dress", "Coat",               "Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"]

n_rows = 4n_cols = 10plt.figure(figsize=(n_cols * 1.2, n_rows * 1.2))for row in range(n_rows):    for col in range(n_cols):        index = n_cols * row + col        plt.subplot(n_rows, n_cols, index + 1)        plt.imshow(X_train[index], cmap="binary", interpolation="nearest")        plt.axis('off')        plt.title(class_names[y_train[index]], fontsize=12)plt.subplots_adjust(wspace=0.2, hspace=0.5)save_fig('fashion_mnist_plot', tight_layout=False)plt.show()

我们已经准备好用Keras来建立我们的MLP。下面是一个具有两个隐藏层的分类MLP:model = keras.models.Sequential([    keras.layers.Flatten(input_shape=[28,28]),    keras.layers.Dense(300, activation="relu"),    keras.layers.Dense(100, activation="relu"),    keras.layers.Dense(10, activation="softmax")])让我们一行一行地看这个代码:首先,我们创建了一个Sequential模型,它是神经网络中最简单的Keras模型,它只由一堆按顺序连接的层组成。接下来,我们构建第一层并将其添加到模型中。它是一个Flatten层,其目的是将每个输入图像转换成一个1D数组:如果它接收到输入数据X,则计算X.reshape(-1,1)。由于它是模型的第一层,所以应该指定其输入形状。你也可以添加keras.layers.InputLayer作为第一层,设置其input_shape=[28,28]下一步,我们添加一个300个神经元的隐藏层,并指定它使用ReLU激活函数。每一个全连接层管理自己的权重矩阵,包含神经元与其输入之间的所有连接权重,同事它还管理一个偏置向量,每个神经元一个。然后我们添加了第二个100个神经元的隐藏层,同样使用ReLU激活函数。最后,我们使用softmax激活函数添加了一个包含10个神经元的输出层(因为我们的分类任务是每个类都是互斥的)。使用回调在Keras中,fit()方法接受一个回调参数,该参数允许你指定Keras在训练开始和结束、每个epoch的开始和结束时,甚至在处理每个batch处理之前和之后要调用对象的列表。为了实现指数级增长的学习率,我们需要创建自己的自定义回调。我们的回调接受一个参数,用于提高学习率的因子。为了将损失描绘成学习率的函数,我们跟踪每个batch的速率和损失。请注意,我们将函数定义为on_batch_end(),这取决于我们的目标,当然也可以是on_train_begin(), on_train_end(), on_batch_begin()。对于我们的用例,我们希望在每个批处理之后提高学习率并记录损失:K = keras.backend

class ExponentialLearningRate(keras.callbacks.Callback):    def __init__(self, factor):        self.factor = factor        self.rates = []        self.losses = []    def on_batch_end(self, batch, logs):        self.rates.append(K.get_value(self.model.optimizer.lr))        self.losses.append(logs["loss"])        K.set_value(self.model.optimizer.lr, self.model.optimizer.lr * self.factor)现在我们的模型已经创建好了,我们只需调用它的compile()方法来指定要使用的loss函数和优化器,或者你可以指定要在训练和评估期间计算的额外指标列表。首先,我们使用“稀疏的分类交叉熵”损失,因为我们有稀疏的标签(也就是说,对于每个实例,只有一个目标类索引,在我们的例子中,从0到9),并且这些类是互斥的);接下来,我们指定使用随机梯度下降,并将学习速率初始化为1e-3,并在每次迭代中增加0.5%:model.compile(loss="sparse_categorical_crossentropy",              optimizer=keras.optimizers.SGD(lr=1e-3),              metrics=["accuracy"])expon_lr = ExponentialLearningRate(factor=1.005)现在让我们训练模型一个epoch:history = model.fit(X_train, y_train, epochs=1,                    validation_data=(X_valid, y_valid),                    callbacks=[expon_lr])我们现在可以将损失绘制为学习率的函数:plt.plot(expon_lr.rates, expon_lr.losses)plt.gca().set_xscale('log')plt.hlines(min(expon_lr.losses), min(expon_lr.rates), max(expon_lr.rates))plt.axis([min(expon_lr.rates), max(expon_lr.rates), 0, expon_lr.losses[0]])plt.xlabel("Learning rate")plt.ylabel("Loss")save_fig("learning_rate_vs_loss")

对于字节跳动和美方买家来说,想要顺利出售TikTok美国业务,难度真的不小。据外媒报道称,为了尽快达成合作,抖音海外版TikTok的潜在买家正在讨论收购该短视频应用美国业务的四种方案,其中包括在不纳入核心算法的情况下收购TikTok美国业务,以规避中国的出口管制规定。但是如果这么做,这将是微软和甲骨文的一次豪赌,因为他们必须快速开发出替代算法。另外三种方案包括:寻求中国的批准获得TikTok的算法,取得字节跳动的算法授权、向美国外国投资委员会申请至多一年的过渡期。目前还不清楚收购方将会采用哪种方案。随着最后期限越来越近,达成交易的几率正在降低,如果TikTok无法达成出售协议,该应用将在9月2......Next article READ