自编码器和分类器python

自编码器和分类器python,第1张

你好,下面是氏空御一个keras的softmax分类器+自编码器的python代码。你需要安装最新的theano1.0.4才可以跑。

import os

os.environ['KERAS_BACKEND'] = 'theano'

import keras

from keras.datasets import mnist

from keras.models import Model

from keras.layers import Input, Conv2D, MaxPooling2D, Flatten, Dense, UpSampling2D

batch_size = 128

num_classes = 10

epochs = 12

# input image dimensions

img_rows, img_cols = 28, 28

# Data 

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1).astype('float32') / 255

x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1).astype('歼岩float32') / 255

y_train = keras.utils.to_categorical(y_train, num_classes)

y_test = keras.utils.to_categorical(y_test, num_classes)

# Convolutional Encoder

input_img = Input(shape=(img_rows, img_cols, 1))

conv_1 = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)

pool_1 = MaxPooling2D((2, 2), padding='same')(conv_1)

conv_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool_1)

pool_2 = MaxPooling2D((2, 2), padding='same')(conv_2)

conv_3 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool_2)

encoded= MaxPooling2D((2, 2), padding='same')(conv_3)

# Classification

flatten = Flatten()(encoded)

fc = Dense(128, activation='relu')(flatten)

softmax = Dense(num_classes, activation='softmax', name='classification')(fc)

# Decoder

conv_4 = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)

up_1 = UpSampling2D((2, 2))(conv_4)

conv_5 = Conv2D(8, (3, 3), activation='relu', padding='same')(up_1)

up_2 = UpSampling2D((2, 2))(conv_5)

conv_6 = Conv2D(16, (3, 3), activation='relu')(up_2)

up_3 = UpSampling2D((2, 2))(conv_6)

decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same', name='autoencoder')(up_3)

model = Model(inputs=input_img, outputs=[softmax, decoded])

model.compile(loss={'classification': 'categorical_crossentropy', 

                    'autoencoder': 'binary_crossentropy'},

              optimizer='adam',

         亏或     metrics={'classification': 'accuracy'})

model.fit(x_train, 

          {'classification': y_train, 'autoencoder': x_train},

          batch_size=batch_size,

          epochs=epochs,

          validation_data= (x_test, {'classification': y_test, 'autoencoder': x_test}),

          verbose=1)

默认情况下,Python 源文件是 UTF-8 编码。在此编码下,全世界大多数语言的字符可以同时用在字符串、标识符和注释中唤迟 — 尽管 Python 标准库仅使用 ASCII 字符作为标识符,这只是任何可移植代码应该遵守的迟枝约定。如果要正确的显示所有的字符,你的编辑器必须能识别出文件是 UTF-8 编码,并且它使用的字体能支持文件中所有的字符。

你也可以为源文件制定不同的字符编码。为此,在 #! 行(首行)后插入至少一行特殊的注释行来定义和旦李源文件的编码:

# -*- coding: encoding -*-

通过此声明,源文件中所有的东西都会被当作用 encoding 指代的 UTF-8 编码对待。在 Python 库参考手册 codecs 一节中你可以找到一张可用的编码列表。

例如,如果你的编辑器不支持 UTF-8 编码的文件,但支持像 Windows-1252 的其他一些编码,你可以定义:

# -*- coding: cp-1252 -*-

这样就可以在源文件中使用 Windows-1252 字符集中的所有字符了。这个特殊的编码注释必须在文件中的 第一或第二 行定义。

编码格式声明

通常,编码格式声明是必需的。如果 python 源码文件没有声明编码格式,python 解释器会默认使用 ASCII 编码,一旦源码文件包含非ASCII编码的字符,python 解释器就会报错。以 UTF-8 为例,以下两种编码格式声明都是合乎规则的。

缩进

统一使用 4 个空格进行缩进。绝对不要用tab, 也不要tab和空格混用。对于行连接的情况,我一般使用4空格的悬挂式缩进。例如:

引号

自然语言使用双引号

机器标识使用单引号

正则表达式使用双引号

空行

编码格式声明、模块导入、常量和全局变量声明、顶级弯和定义和执行代码之间空两行

顶级定义之间空两行,方法定义之间空一行

在函数或方法内部,可以在必要的地方空一行以增强节奏感,但应避免连续空行

导入模块

导入总应该放在文件顶部,位于模块注释和文档字符串之后,模块全局变量和常量之前。导入应该按照从最通用到最不通用的顺序分组,分组之间空一行

标准库导入

第三方库导入

应用程序指定导入

命名规范

模块尽量使用小写命名,首字母保持小写,尽量埋蚂盯不要用下划线

类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头

函数名一律小写,如有多个单词,用下划线隔开

私有函数可用一个下划线开头

变物绝量名尽量小写, 如有多个单词,用下划线隔开

常量采用全大写,如有多个单词,使用下划线隔开


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12313600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存