Neural network 无法使此自动编码器网络正常工作(使用卷积层和maxpool层)
网络似乎比普通的分类器MLP网络更复杂。经过几次尝试,使用我在重构输出中获得的所有内容,最接近于数据库中所有图像的模糊平均值,而不区分输入数字的实际内容 我选择的网络结构是以下级联层: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
将无张量导入为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(聚合损失,参数)
序列号=编号功能([输入变量,输出变量],丢失,更新=更新)
测试预测=千层面