深入理解Python中Keras.activationstanh()激活函数的效果
发布时间:2023-12-24 06:16:42
在深度学习中,激活函数被广泛应用于神经网络的隐藏层和输出层,以增强模型的表达能力和非线性拟合能力。其中,Keras是一个基于Python的神经网络库,提供了丰富的激活函数选项,其中之一就是Keras的激活函数tanh()。
tanh()是双曲正切函数,定义为(1 - e^(-2x))/(1 + e^(-2x)),它的输出范围是[-1, 1],其中负数趋向于-1,正数趋向于1,0处于函数的中心。
tanh()的主要优点之一是它是连续可微的,这对于训练神经网络来说是很重要的。此外,它可以将任意输入映射到任意输出,具有较大的非线性特性。
下面是一个使用Keras激活函数tanh()的例子,其中通过一个简单的神经网络来分类手写数字图像。
import numpy as np
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Flatten
from keras.activations import tanh
from keras.utils import to_categorical
# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 预处理数据
x_train = x_train.reshape(x_train.shape[0], 28 * 28) / 255
x_test = x_test.reshape(x_test.shape[0], 28 * 28) / 255
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
# 创建神经网络模型
model = Sequential()
model.add(Dense(512, activation=tanh, input_shape=(28 * 28,)))
model.add(Dense(10, activation='softmax'))
# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, batch_size=128, epochs=10, validation_data=(x_test, y_test))
# 评估模型
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
在上述例子中,首先我们加载了MNIST手写数字数据集,然后对数据进行预处理,将图像数据重塑为一维向量,并将像素值归一化到[0, 1]之间。接下来,我们定义了一个包含一个具有512个神经元的隐藏层和一个具有10个神经元的输出层的神经网络模型。在隐藏层中,我们将激活函数设置为tanh(),输出层使用softmax激活函数。然后我们编译模型,并使用训练集对模型进行训练。最后,我们评估模型在测试集上的性能。
通过这个例子,我们可以看到tanh()激活函数的效果。它可以在较小的训练轮数内获得相对较高的准确率,与其他激活函数相比,它更适合处理现有数据的均值和方差较大的问题。同时,tanh()的非线性特性使得它能够拟合复杂的非线性关系,从而提高模型的拟合能力。
总结起来,Keras中的tanh()激活函数通过将任意输入映射到区间[-1, 1]之间的输出,可以增强神经网络的非线性拟合能力,并且是一个常用且有效的激活函数。
