如何使用 Keras 或 Tensorflow 为小波神经网络编写自定义小波激活函数

Kin*_*ing 5 neural-network pywavelets keras tensorflow activation-function

尝试使用 Keras/Tensorflow 构建小波神经网络。对于这个神经网络,我应该使用小波函数作为我的激活函数。

我尝试通过简单地调用创建自定义激活函数来做到这一点。然而,反向传播似乎存在问题

import numpy as np
import pandas as pd
import pywt
import matplotlib.pyplot as plt
import tensorflow as tf
from keras.models import Model
import keras.layers as kl
from keras.layers import Input, Dense
import keras as kr
from keras.layers import Activation
from keras import backend as K
from keras.utils.generic_utils import get_custom_objects


def custom_activation(x):
  return pywt.dwt(x, 'db1') -1

get_custom_objects().update({'custom_activation':Activation(custom_activation)})

model = Sequential()
model.add(Dense(12, input_dim=8, activation=custom_activation))
model.add(Dense(8, activation=custom_activation)
model.add(Dense(1, activation=custom_activation) 
Run Code Online (Sandbox Code Playgroud)

完整运行代码时出现以下错误

SyntaxError: invalid syntax

如果我跑

model = Sequential()
model.add(Dense(12, input_dim=8, activation=custom_activation))
model.add(Dense(8, activation=custom_activation)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误 SyntaxError: unexpected EOF while parsing

如果我跑

model = Sequential() model.add(Dense(12, input_dim=8, activation=custom_activation))

我收到以下错误

TypeError: Cannot convert DType to numpy.dtype

小智 1

model.add()是一个函数调用。必须将括号括起来,否则会出现语法错误。

代码示例中的这两行将导致语法错误。

model.add(Dense(8, activation=custom_activation)
model.add(Dense(1, activation=custom_activation)
Run Code Online (Sandbox Code Playgroud)

关于第二个问题:

我收到以下错误

TypeError: Cannot convert DType to numpy.dtype
Run Code Online (Sandbox Code Playgroud)

这似乎是使用不正确的参数调用了 numpy 函数。也许您可以尝试找出脚本中的哪一行导致了错误。

此外,还必须在 keras 后端操作中编写激活函数。或者您需要手动计算它的梯度。神经网络训练需要能够计算反向传递中函数的梯度,以便调整权重。据我了解,你不能只调用任意Python库作为激活函数;您必须使用张量运算重新实现其运算,或者如果您知道如何手动计算梯度,则可以选择对急切张量使用 python 运算。