Neural network 无法使此自动编码器网络正常工作(使用卷积层和maxpool层)

Neural network 无法使此自动编码器网络正常工作(使用卷积层和maxpool层),neural-network,dimensionality-reduction,conv-neural-network,autoencoder,lasagne,Neural Network,Dimensionality Reduction,Conv Neural Network,Autoencoder,Lasagne,网络似乎比普通的分类器MLP网络更复杂。经过几次尝试,使用我在重构输出中获得的所有内容,最接近于数据库中所有图像的模糊平均值,而不区分输入数字的实际内容 我选择的网络结构是以下级联层: 输入层(28x28) 二维卷积层,滤波器尺寸7x7 最大池层,尺寸3x3,跨步2x2 密集(完全连接)平整层,10台(这是瓶颈) 密集(完全连接)层,121个单元 将层重塑为11x11 二维卷积层,滤波器尺寸3x3 二维放大图层系数2 二维卷积层,滤波器尺寸3x3 二维放大图层系数2 二维卷积层,滤波器尺寸5x5

网络似乎比普通的分类器MLP网络更复杂。经过几次尝试,使用我在重构输出中获得的所有内容,最接近于数据库中所有图像的模糊平均值,而不区分输入数字的实际内容

我选择的网络结构是以下级联层:

  • 输入层(28x28)
  • 二维卷积层,滤波器尺寸7x7
  • 最大池层,尺寸3x3,跨步2x2
  • 密集(完全连接)平整层,10台(这是瓶颈)
  • 密集(完全连接)层,121个单元
  • 将层重塑为11x11
  • 二维卷积层,滤波器尺寸3x3
  • 二维放大图层系数2
  • 二维卷积层,滤波器尺寸3x3
  • 二维放大图层系数2
  • 二维卷积层,滤波器尺寸5x5
  • 功能最大池(从31x28x28到28x28)
  • 所有的二维卷积层都有无偏、乙状激活和31个滤波器

    所有完全连接的层都有乙状激活

    使用的损失函数为,更新函数为。学习块的长度是100个样本,乘以1000个时代

    为了完整起见,以下是我使用的代码:

    将无张量导入为T
    进口茶
    导入系统
    sys.path.insert(0'。/千层面')#千层面的本地签出
    进口千层面
    从theano进口pp
    从无导入函数
    导入gzip
    将numpy作为np导入
    从sklearn.preprocessing导入OneHotEncoder
    将matplotlib.pyplot作为plt导入
    def load_mnist():
    def load_mnist_图像(文件名):
    将gzip.open(文件名'rb')作为f:
    data=np.frombuffer(f.read(),np.uint8,offset=16)
    #现在,输入是矢量,我们将其重塑为单色2D图像,
    #遵循形状约定:(示例、通道、行、列)
    数据=数据。重塑(-1,1,28,28)
    #输入以字节形式出现,我们将其转换为[0,1]范围内的float32。
    #(实际范围为[0255/256],以便与版本兼容
    #提供于http://deeplearning.net/data/mnist/mnist.pkl.gz.)
    返回数据/np.float32(256)
    def加载列表标签(文件名):
    #阅读Yann LeCun二进制格式的标签。
    将gzip.open(文件名'rb')作为f:
    data=np.frombuffer(f.read(),np.uint8,offset=8)
    #标签现在是整数向量,这正是我们想要的。
    返回数据
    X_train=加载列表图像('train-images-idx3-ubyte.gz'))
    y_train=加载列表标签('train-labels-idx1-ubyte.gz')
    X_测试=加载列表图像('t10k-images-idx3-ubyte.gz')
    y_测试=加载列表标签('t10k-labels-idx1-ubyte.gz')
    返回X_列,y_列,X_测试,y_测试
    def plot_过滤器(转换层):
    W=conv_layer.get_params()[0]
    W_fn=编号函数([],W)
    参数=W_fn()
    ks=np.挤压(参数)
    kstack=np.vstack(ks)
    plt.imshow(kstack,interpolation='none')
    plt.show()
    def main():
    #theano.config.exception\u verbosity=“高”
    #theano.config.optimizer='None'
    X_列,y_列,X_测试,y_测试=负载列表()
    ohe=OneHotEncoder()
    y_列=ohe.fit_变换(np.expand_dims(y_列,1)).toarray()
    区块长度=100
    visamount=10
    num_epochs=1000
    num_filters=31
    辍学率p=0.0
    打印“X_train.shape”,X_train.shape,“y_train.shape”,y_train.shape
    输入变量=T.tensor4('X')
    输出变量=T.tensor4('X')
    conv_非线性=千层面、非线性、乙状结肠
    net=lasagne.layers.InputLayer((chunk\u len,1,28,28),input\u var)
    conv1=net=lasagne.layers.Conv2DLayer(net,num_过滤器,(7,7),非线性=conv_非线性,unte_偏差=True)
    net=lasagne.layers.MaxPool2DLayer(net,(3,3),stride=(2,2))
    净=千层面.layers.DropoutLayer(净,p=辍学)
    #conv2_层=千层面.layers.Conv2DLayer(脱落层,num_过滤器,(3,3),非线性=conv_非线性)
    #pool2_层=千层面。层。MaxPool2DLayer(conv2_层,(3,3),跨步=(2,2))
    net=千层面.layers.DenseLayer(net,10,非线性=千层面.nonlinearities.sigmoid)
    #增强层1=千层面.layers.DenseLayer(减少层,33,非线性=千层面.nonlinearities.sigmoid)
    net=lasagne.layers.DenseLayer(net,121,非线性=lasagne.nonlinearities.sigmoid)
    净=千层面.层.重塑层(净,(块,1,11,11))
    net=lasagne.layers.Conv2DLayer(net,num_过滤器,(3,3),非线性=conv_非线性,unte_偏差=True)
    净=千层面.layers.Upscale2DLayer(净,2)
    net=lasagne.layers.Conv2DLayer(net,num_过滤器,(3,3),非线性=conv_非线性,unte_偏差=True)
    #pool_after0=千层面。layers.MaxPool2DLayer(conv_after1,(3,3),步长=(2,2))
    净=千层面.layers.Upscale2DLayer(净,2)
    净=千层面.layers.DropoutLayer(净,p=辍学)
    #conv_after2=千层面.layers.Conv2DLayer(高档层1,num_过滤器,(3,3),非线性=conv_非线性,无偏差=真)
    #pool_after1=千层面。layers.MaxPool2DLayer(conv_after2,(3,3),stride=(1,1))
    #高档次2层=千层面。层。高档次2层(泳池1,4后)
    net=lasagne.layers.Conv2DLayer(net,num_过滤器,(5,5),非线性=conv_非线性,unte_偏差=True)
    net=lasagne.layers.FeaturePoolLayer(net,num\u过滤器,pool\u函数=theano.tensor.max)
    打印“输出形状:”,千层面。图层。获取输出形状(净)
    params=千层面。layers.get_all_参数(net,trainable=True)
    预测=千层面。层。获取输出(净)
    损失=千层面。目标。平方误差(预测,输出值)
    #损失=千层面。目标。二元交叉熵(预测,输出值)
    累计损失=千层面。目标。累计(损失)
    updates=lasagne.updates.adagrad(聚合损失,参数)
    序列号=编号功能([输入变量,输出变量],丢失,更新=更新)
    测试预测=千层面