3

尝试使用 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) 

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

SyntaxError: invalid syntax

如果我跑

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

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

如果我跑

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

我收到以下错误

TypeError: Cannot convert DType to numpy.dtype

4

1 回答 1

1

model.add()是一个函数调用。必须关闭括号,否则是语法错误。

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

model.add(Dense(8, activation=custom_activation)
model.add(Dense(1, activation=custom_activation)

关于第二个问题:

我收到以下错误

TypeError: Cannot convert DType to numpy.dtype

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

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

于 2019-07-19T08:22:59.150 回答