keras

1. 四维图像卷积输入

from keras.layers import Dense,Activation,Dropout,Conv2D,MaxPool2D,MaxPooling2D,Flatten
from keras.utils import np_utils
from PIL import Image
import numpy as np
import glob,codecs

from keras import backend as K
K.set_image_data_format('channels_last')
nb_classes = 2
length_sample = 0

def T_Model():
    model = Sequential()
    model.add(Conv2D(32, kernel_size=(5, 5), input_shape=(512, 64, 1), activation='relu', padding='same'))
    model.add(MaxPool2D())
    model.add(Dropout(0.3))

    model.add(Conv2D(64, kernel_size=(5, 5), activation='relu', padding='same'))
    model.add(MaxPool2D())
    model.add(Dropout(0.3))

    model.add(Conv2D(128, kernel_size=(5, 5), activation='relu', padding='same'))
    model.add(MaxPool2D())
    model.add(Dropout(0.5))

    model.add(Conv2D(256, kernel_size=(5, 5), activation='relu', padding='same'))
    model.add(MaxPool2D())
    model.add(Dropout(0.5))

    model.add(Flatten())
    model.add(Dense(512, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(2, activation='softmax'))
    return model
    
def load_data():
    X_train = []
    y_train = []
    paths = glob.glob("./data/dataline/train30/*.jpg")
    i = 1
    for img_path in paths:
        print img_path
        i = i + 1
        try:
            img = Image.open(img_path).convert('L')
            img = img.resize((512, 64), Image.ANTIALIAS)
            X_train.append(np.asarray(img).reshape(512,64,1))
            with codecs.open(img_path.replace(".jpg",'.txt'),'r','utf-8') as fp:
                content = fp.read()
                if content == "1":
                    y_train.append(1)
                else:
                    y_train.append(0)
        except IOError:
            print('Corrupted image for %s' % img_path)
            pass
    length_sample = len(X_train)
    print y_train
    return X_train,y_train,length_sample

def load_test():
    x_test = []
    y_test = []
    paths = glob.glob("./data/dataline/train30/*.txt")
    for txt_path in paths:
        try:
            with codecs.open(txt_path, 'r', 'utf-8') as fp:
                content = fp.read()
                if content == "1":
                    y_test.append(1)
                else:
                    y_test.append(0)
                img = Image.open(txt_path.replace('.txt','.jpg')).convert('L')
                img = img.resize((512, 64), Image.ANTIALIAS)
                x_test.append(np.asarray(img).reshape(512,64,1))
        except IOError:
            print('Corrupted image for %s' % txt_path)
            pass
    print y_test
    length_sample = len(x_test)
    return x_test,y_test,length_sample

def main():
    x_train, y_train,length_sample = load_data()
    print len(x_train)
    indix = range(length_sample)
    np.random.shuffle(indix)
    x_train = np.array(x_train).astype('float32')
    y_train = np_utils.to_categorical(y_train,nb_classes)
    model = T_Model()
    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
    model.fit(x_train[indix], y_train[indix], epochs=20, batch_size=1, verbose=1)
    model.save("recognize_.h5")
    x_test, y_test, length_sample_test = load_test()
    x_test = np.array(x_test).astype('float32')
    y_test = np_utils.to_categorical(y_test, nb_classes)
    print y_test
    model = load_model("recognize_.h5")
    a,b = model.evaluate(x_test,y_test,batch_size=1)
    print "\nacc:%f\nloss:%f"%(b,a)

if __name__ == "__main__":
    main()

说明: 目录./data/dataline/train30/下包含两类图像,图像文件和名称保持一致,图像扩展名为.jpg,文本扩展名为.txt,文本内容分别为0和1.

2.input_dim与Lambda含义


from keras import backend as K
from keras.models import Sequential, Model
from keras.layers import Dense
import numpy as np
from keras.layers import Lambda
def get_submean_model():
    model = Sequential()
    model.add(Dense(5,input_dim=7))
    def sub_mean(x):
        x -= K.mean(x,axis=1,keepdims=True)
        print x
        return x
    model.add(Lambda(sub_mean,output_shape=lambda aa:aa))
    model.compile(optimizer='rmsprop',loss='mse')
    return model
model = get_submean_model()
res=model.predict(np.random.random((3,7)))

说明:Dense层的input_dim的维数和np.random.random((3,7))产生的二维数组第二维相同

3 keras工程验证码识别

#-*-coding:utf-8-*-
from captcha.image import ImageCaptcha
import matplotlib.pyplot as plt
import numpy as np
import random
from keras.models import *
from keras.layers import *
import string
characters = string.digits + string.ascii_uppercase + string.ascii_lowercase

width, height, n_len, n_class = 170, 80, 4, len(characters)

def gen(batch_size=32):
    X = np.zeros((batch_size, height, width, 3), dtype=np.uint8)
    y = [np.zeros((batch_size, n_class), dtype=np.uint8) for i in range(n_len)]
    generator = ImageCaptcha(width=width, height=height)
    while True:
        for i in range(batch_size):
            random_str = ''.join([random.choice(characters) for j in range(4)])
            X[i] = generator.generate_image(random_str)
            for j, ch in enumerate(random_str):
                y[j][i, :] = 0
                y[j][i, characters.find(ch)] = 1
        yield X, y

def decode(y):
    y = np.argmax(np.array(y), axis=2)[:,0]
    return ''.join([characters[x] for x in y])

input_tensor = Input((height, width, 3))
x = input_tensor
for i in range(4):
    x = Conv2D(32*2**i, 3, 3, activation='relu')(x)
    x = Conv2D(32*2**i, 3, 3, activation='relu')(x)
    x = MaxPooling2D((2, 2))(x)

x = Flatten()(x)
x = Dropout(0.25)(x)
x = [Dense(n_class, activation='softmax', name='c%d'%(i+1))(x) for i in range(4)]
model = Model(input=input_tensor, output=x)
model.compile(loss='categorical_crossentropy',optimizer='adadelta', metrics=['accuracy'])
###这里构造一个callback的数组,当作参数传给fit
tb_cb = keras.callbacks.TensorBoard(log_dir='logs', write_graph=True, write_images=False,
                                    embeddings_freq=0, embeddings_layer_names=None, embeddings_metadata=None)
es_cb = keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0.09, patience=5, verbose=1, mode='auto')
cbks = [];
cbks.append(tb_cb);
cbks.append(es_cb);
model.fit_generator(gen(), samples_per_epoch=512, nb_epoch=1,callbacks=cbks,nb_worker=1,validation_data=gen(), validation_steps=32)

说明:np.argmax(np.array(y), axis=2)打印的值为:

[[41]
[3 ]
[48]
[26]]

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、资源1项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值