您可以创建一个函数并将其作为可调用对象传递给您的模型,在参数activation 下。函数如下:
def mish(inputs):
x = tf.nn.softplus(inputs)
x = tf.nn.tanh(x)
x = tf.multiply(x, inputs)
return x
您可以将其作为activation 放在您的某一层中:
model = tf.keras.Sequential([
Conv2D(filters=16, kernel_size=(3, 3), strides=(1, 1),
input_shape=(28, 28, 1), activation='relu'),
MaxPool2D(pool_size=(2, 2)),
Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1),
activation='relu'),
MaxPool2D(pool_size=(2, 2)),
Flatten(),
Dense(64, activation=mish), # here
Dropout(5e-1),
Dense(10, activation='softmax')
])
这是培训:
import tensorflow as tf
from tensorflow import keras
import numpy as np
(xtrain, ytrain), (xtest, ytest) = keras.datasets.mnist.load_data()
xtrain = np.float32(xtrain/255)
xtest = np.float32(xtest/255)
ytrain = np.int32(ytrain)
ytest = np.int32(ytest)
def pre_process(inputs, targets):
inputs = tf.expand_dims(inputs, -1)
targets = tf.one_hot(targets, depth=10)
return tf.divide(inputs, 255), targets
train_data = tf.data.Dataset.from_tensor_slices((xtrain, ytrain)).\
take(10_000).shuffle(10_000).batch(8).map(pre_process)
test_data = tf.data.Dataset.from_tensor_slices((xtest, ytest)).\
take(1_000).shuffle(1_000).batch(8).map(pre_process)
def mish(inputs):
x = tf.nn.softplus(inputs)
x = tf.nn.tanh(x)
x = tf.multiply(x, inputs)
return x
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(filters=16, kernel_size=(3, 3), strides=(1, 1),
input_shape=(28, 28, 1), activation='relu'),
tf.keras.layers.MaxPool2D(pool_size=(2, 2)),
tf.keras.layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1),
activation='relu'),
tf.keras.layers.MaxPool2D(pool_size=(2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(64, activation=mish),
tf.keras.layers.Dropout(5e-1),
tf.keras.layers.Dense(10, activation='softmax')])
model.compile(loss='categorical_crossentropy', optimizer='adam')
history = model.fit(train_data, validation_data=test_data, epochs=10)