我正在尝试在 keras 中使用自动编码器来创建类似于独立分量分析 (ICA) 的线性变换(使用它对脑电图数据进行去噪,时间序列为 64x100000 pts)。虽然自动编码器在使用隐藏层中较少数量的神经元重新创建输入方面做得很好,但隐藏层中的权重没有结构,也就是说,它似乎没有隔离数据中的结构,它只是将压缩层中的所有内容混合在一起。例如,ICA 能够隔离诸如心跳、眨眼和大脑活动之类的东西,但隐藏层中重建的时间序列只是所有这些不同信号的线性混合。
有谁知道如何强制在隐藏层中构建的时间序列在时间上是独立的?我想我必须创建某种自定义正则化器,但我不知道如何去做。
这是我的keras代码:
import numpy as np
import scipy as scipy
from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
from keras.layers import BatchNormalization
import matplotlib.pyplot as plt
from keras import regularizers
from keras.constraints import max_norm, non_neg, unit_norm
from keras import backend as K
raw = scipy.io.loadmat('raw.mat')
raw = raw['raw'];
#acts = scipy.io.loadmat('acts.mat')
#acts = acts['acts'];
model = Sequential()
model.add(Dense(32,input_shape=(64,)))
model.add(Activation('linear'))
model.add(Dense(16))
model.add(Activation('linear'))
model.add(Dense(64))
model.add(Activation('linear'))
model.summary()
model.compile(optimizer='Adamax',loss='mean_absolute_error')
xtrain = raw[:,:].transpose()
#xref = acts[:,:].transpose()
model.fit(xtrain, xtrain, verbose=1, batch_size=200, epochs=20)