【问题标题】:Error when running the model with custom square activation function使用自定义平方激活函数运行模型时出错
【发布时间】:2022-06-13 21:55:40
【问题描述】:

我是 DL 和 Python 的新手,我基于 MNIST 构建了一个模型,并尝试了 自定义方形激活函数。我使用 Keras 构建函数,并且我理解 Keras 会自动找到反向传播过程的导数。我不知道问题?它是函数的输入还是数据类型? 提前致谢。

代码


import tensorflow
from tensorflow.keras.datasets import mnist
from tensorflow.keras import backend as K 
from keras.utils.generic_utils import get_custom_objects
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten, Activation
from tensorflow.keras.layers import Conv2D, MaxPooling2D
import numpy as np
import matplotlib.pyplot as plt

# Custom activation function
def custom_activation(x):
    return (K.x ** 2) 

# Before creating the model, I update Keras' custom objects:
get_custom_objects().update({'custom_activation': Activation(custom_activation)})

# Model configuration
img_width, img_height = 28, 28
batch_size = 32
no_epochs = 5
no_classes = 10
# validation_split = 0.2
verbosity = 1

# Load MNIST dataset
(input_train, target_train), (input_test, target_test) = mnist.load_data()

# Reshape data
input_train = input_train.reshape(input_train.shape[0], img_width, img_height, 1)
input_test = input_test.reshape(input_test.shape[0], img_width, img_height, 1)
input_shape = (img_width, img_height, 1)

# Parse numbers as floats
input_train = input_train.astype('float32')
input_test = input_test.astype('float32')

# Normalize data: [0, 1].
input_train = input_train / 255
input_test = input_test / 255

# Convert target vectors to categorical targets
target_train = tensorflow.keras.utils.to_categorical(target_train, no_classes)
target_test = tensorflow.keras.utils.to_categorical(target_test, no_classes)

# Create the model
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation=custom_activation, input_shape=(input_shape)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(100, activation=custom_activation))
model.add(Dropout(0.5))
model.add(Dense(no_classes, activation='softmax'))

# Compile the model
model.compile(loss=tensorflow.keras.losses.categorical_crossentropy,
              optimizer=tensorflow.keras.optimizers.Adam(),
              metrics=['accuracy'])

# visualize the layers created above (Architecture)
model.summary()

# Fit data to model
history = model.fit(input_train, target_train,
            batch_size=batch_size,
            epochs=no_epochs,
            verbose=verbosity,
            validation_data = (input_test,target_test))

# show predictions as probabilities for the 1st four images in the test set
predictions = model.predict(input_test)
predictions


# Generate generalization metrics
score = model.evaluate(input_test, target_test, verbose=0)
print(f'Test loss: {score[0]} / Test accuracy: {score[1]}')

# Plot history: Crossentropy loss
plt.plot(history.history['loss'], label='Crossentropy loss (training data)')
plt.plot(history.history['val_loss'], label='Crossentropy loss (validation data)')
plt.title('Crossentropy loss')
plt.ylabel('Loss value')
plt.xlabel('Epochs')
plt.legend(loc="upper left")
plt.show()

# Plot history: Accuracies
plt.plot(history.history['accuracy'], label='Accuracy (training data)')
plt.plot(history.history['val_accuracy'], label='Accuracy (validation data)')
plt.title('Accuracies')
plt.ylabel('Accuracy')
plt.xlabel('Epochs')
plt.legend(loc="upper left")
plt.show()

错误


AttributeError: 调用层“conv2d_4”(Conv2D 类型)时遇到异常。

模块 'keras.api._v2.keras.backend' 没有属性 'x'

层“conv2d_4”(Conv2D 类型)接收的调用参数: • 输入=tf.Tensor(shape=(None, 28, 28, 1), dtype=float32)

【问题讨论】:

  • 也许你的意思是return K.square(x)

标签: deep-learning activation-function


猜你喜欢
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多