日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DL之CNN:基于CNN-RNN(GRU,2)算法(keras+tensorflow)实现不定长文本识别

發(fā)布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DL之CNN:基于CNN-RNN(GRU,2)算法(keras+tensorflow)实现不定长文本识别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

DL之CNN:基于CNN-RNN(GRU,2)算法(keras+tensorflow)實(shí)現(xiàn)不定長文本識別

?

?

目錄

輸出結(jié)果

實(shí)現(xiàn)代碼


?

?

?

?

輸出結(jié)果

后期更新……

?

?

?

實(shí)現(xiàn)代碼

后期更新……

image_ocr代碼:DL之CNN:利用CNN(keras, CTC loss, {image_ocr})算法實(shí)現(xiàn)OCR光學(xué)字符識別

#DL之CNN:基于CNN-RNN(GRU,2)算法(keras+tensorflow)實(shí)現(xiàn)不定長文本識別#Keras 的 CTC loss函數(shù):位于 https://github.com/fchollet/keras/blob/master/keras/backend/tensorflow_backend.py文件中,內(nèi)容如下:import tensorflow as tf from tensorflow.python.ops import ctc_ops as ctcdef ctc_batch_cost(y_true, y_pred, input_length, label_length):"""Runs CTC loss algorithm on each batch element.# Argumentsy_true: tensor `(samples, max_string_length)`containing the truth labels.y_pred: tensor `(samples, time_steps, num_categories)`containing the prediction, or output of the softmax.input_length: tensor `(samples, 1)` containing the sequence length foreach batch item in `y_pred`.label_length: tensor `(samples, 1)` containing the sequence length foreach batch item in `y_true`.# ReturnsTensor with shape (samples,1) containing theCTC loss of each element."""label_length = tf.to_int32(tf.squeeze(label_length))input_length = tf.to_int32(tf.squeeze(input_length))sparse_labels = tf.to_int32(ctc_label_dense_to_sparse(y_true, label_length))y_pred = tf.log(tf.transpose(y_pred, perm=[1, 0, 2]) + 1e-8)return tf.expand_dims(ctc.ctc_loss(inputs=y_pred, labels=sparse_labels, sequence_length=input_length), 1)# 不定長文本識別 import os import itertools import re import datetime import cairocffi as cairo import editdistance import numpy as np from scipy import ndimage import pylabfrom keras import backend as K from keras.layers.convolutional import Conv2D, MaxPooling2D from keras.layers import Input, Dense, Activation, Reshape, Lambda from keras.layers.merge import add, concatenate from keras.layers.recurrent import GRU from keras.models import Model from keras.optimizers import SGD from keras.utils.data_utils import get_file from keras.preprocessing import image from keras.callbacks import EarlyStopping,Callbackfrom keras.backend.tensorflow_backend import set_session import tensorflow as tf import matplotlib.pyplot as pltconfig = tf.ConfigProto() config.gpu_options.allow_growth=True set_session(tf.Session(config=config))OUTPUT_DIR = 'image_ocr' np.random.seed(55)# # 從 Keras 官方文件中 import 相關(guān)的函數(shù) # !wget https://raw.githubusercontent.com/fchollet/keras/master/examples/image_ocr.py from image_ocr import *#定義必要的參數(shù): run_name = datetime.datetime.now().strftime('%Y:%m:%d:%H:%M:%S') start_epoch = 0 stop_epoch = 200 img_w = 128 img_h = 64 words_per_epoch = 16000 val_split = 0.2 val_words = int(words_per_epoch * (val_split))# Network parameters conv_filters = 16 kernel_size = (3, 3) pool_size = 2 time_dense_size = 32 rnn_size = 512 input_shape = (img_w, img_h, 1)# 使用這些函數(shù)以及對應(yīng)參數(shù)構(gòu)建生成器,生成不固定長度的驗證碼 fdir = os.path.dirname(get_file('wordlists.tgz', origin='http://www.mythic-ai.com/datasets/wordlists.tgz', untar=True)) img_gen = TextImageGenerator(monogram_file=os.path.join(fdir, 'wordlist_mono_clean.txt'),bigram_file=os.path.join(fdir, 'wordlist_bi_clean.txt'),minibatch_size=32, img_w=img_w, img_h=img_h,downsample_factor=(pool_size ** 2), val_split=words_per_epoch - val_words )#構(gòu)建CNN網(wǎng)絡(luò) act = 'relu'input_data = Input(name='the_input', shape=input_shape, dtype='float32') inner = Conv2D(conv_filters, kernel_size, padding='same', activation=act, kernel_initializer='he_normal',name='conv1')(input_data) inner = MaxPooling2D(pool_size=(pool_size, pool_size), name='max1')(inner) inner = Conv2D(conv_filters, kernel_size, padding='same', activation=act, kernel_initializer='he_normal',name='conv2')(inner) inner = MaxPooling2D(pool_size=(pool_size, pool_size), name='max2')(inner)conv_to_rnn_dims = (img_w // (pool_size ** 2), (img_h // (pool_size ** 2)) * conv_filters) inner = Reshape(target_shape=conv_to_rnn_dims, name='reshape')(inner)#減少輸入尺寸到RNN:cuts down input size going into RNN: inner = Dense(time_dense_size, activation=act, name='dense1')(inner)#GRU模型:兩層雙向的算法 # Two layers of bidirecitonal GRUs # GRU seems to work as well, if not better than LSTM: gru_1 = GRU(rnn_size, return_sequences=True, kernel_initializer='he_normal', name='gru1')(inner) gru_1b = GRU(rnn_size, return_sequences=True, go_backwards=True, kernel_initializer='he_normal', name='gru1_b')(inner) gru1_merged = add([gru_1, gru_1b]) gru_2 = GRU(rnn_size, return_sequences=True, kernel_initializer='he_normal', name='gru2')(gru1_merged) gru_2b = GRU(rnn_size, return_sequences=True, go_backwards=True, kernel_initializer='he_normal', name='gru2_b')(gru1_merged)#將RNN輸出轉(zhuǎn)換為字符激活:transforms RNN output to character activations inner = Dense(img_gen.get_output_size(), kernel_initializer='he_normal',name='dense2')(concatenate([gru_2, gru_2b])) y_pred = Activation('softmax', name='softmax')(inner)Model(inputs=input_data, outputs=y_pred).summary() labels = Input(name='the_labels', shape=[img_gen.absolute_max_string_len], dtype='float32') input_length = Input(name='input_length', shape=[1], dtype='int64') label_length = Input(name='label_length', shape=[1], dtype='int64')#Keras目前不支持帶有額外參數(shù)的loss funcs,所以CTC loss是在lambda層中實(shí)現(xiàn)的 # Keras doesn't currently support loss funcs with extra parameters, so CTC loss is implemented in a lambda layer loss_out = Lambda(ctc_lambda_func, output_shape=(1,), name='ctc')([y_pred, labels, input_length, label_length])#clipnorm似乎加快了收斂速度:clipnorm seems to speeds up convergence sgd = SGD(lr=0.02, decay=1e-6, momentum=0.9, nesterov=True, clipnorm=5) model = Model(inputs=[input_data, labels, input_length, label_length], outputs=loss_out)#計算損失發(fā)生在其他地方,所以使用一個啞函數(shù)來表示損失 # the loss calc occurs elsewhere, so use a dummy lambda func for the loss model.compile(loss={'ctc': lambda y_true, y_pred: y_pred}, optimizer=sgd) if start_epoch > 0:weight_file = os.path.join(OUTPUT_DIR, os.path.join(run_name, 'weights%02d.h5' % (start_epoch - 1)))model.load_weights(weight_file)#捕獲softmax的輸出,以便在可視化過程中解碼輸出 # captures output of softmax so we can decode the output during visualization test_func = K.function([input_data], [y_pred])# 反饋函數(shù),即運(yùn)行固定次數(shù)后,執(zhí)行反饋函數(shù)可保存模型,并且可視化當(dāng)前訓(xùn)練的效果 viz_cb = VizCallback(run_name, test_func, img_gen.next_val())# 執(zhí)行訓(xùn)練: model.fit_generator(generator=img_gen.next_train(), steps_per_epoch=(words_per_epoch - val_words),epochs=stop_epoch, validation_data=img_gen.next_val(), validation_steps=val_words,callbacks=[EarlyStopping(patience=10), viz_cb, img_gen], initial_epoch=start_epoch)

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的DL之CNN:基于CNN-RNN(GRU,2)算法(keras+tensorflow)实现不定长文本识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品1区2区3区 | 成人深夜视频 | 91性高潮久久久久久久 | 美日韩在线观看 | 色免费视频 | 亚洲男人天堂2024 | 69视频在线 | 亚洲色图35p | 国产精品99久久久久久久女警 | a网址| 国产美女喷水视频 | 99热99热| 涩五月婷婷 | 白白色免费视频 | 18深夜在线观看免费视频 | 激情超碰在线 | 狼性av懂色av禁果av | 精品一区二区久久久久蜜桃 | 在线精品观看 | 成人亚洲精品 | 一区二区三区视频播放 | 极品美女无套呻吟啪啪 | 天天色综合久久 | 久久精品一区二区免费播放 | 亚洲av成人精品一区二区三区 | 国产情侣一区二区三区 | 免费精品国产 | 少妇喷潮明星 | 日本精品999| 日韩成人午夜 | 国产精品熟妇人妻g奶一区 a少妇 | 国产精品成熟老女人 | 欧美日韩人妻精品一区在线 | 在线天堂网 | 国产亚洲欧美在线视频 | 亚洲+小说+欧美+激情+另类 | 日日插插 | 日韩视频在线一区 | 国产传媒一区二区三区 | 欧美成人精品一区 | 神马午夜dy888 | 尤物精品视频 | 在线看片你懂得 | www.四虎.| 色一情一乱一乱一区91av | h在线免费观看 | 欧美丰满老熟妇aaaa片 | 一区二区三区精 | 久久久91精品国产一区二区三区 | 国产女主播喷水视频在线观看 | 欧美丝袜视频 | 国产精品一区二区三区在线免费观看 | 天天天av | 久精品视频| 亚洲图片二区 | 中文字幕一区二区精品 | 91国产网站 | 亚洲国产私拍精品国模在线观看 | 国产第一亚洲 | 欧美与黑人午夜性猛交久久久 | 一本大道久久a久久精二百 琪琪色在线视频 | 欧美精品片 | 亚洲a√ | 亚洲精品一二三 | 国产亚洲一区二区三区在线观看 | 在线精品小视频 | 日韩成人免费在线视频 | 特级做a爰片毛片免费69 | 少妇又紧又深又湿又爽视频 | 欧美日韩精品一区二区三区 | 亚洲欧美在线观看 | 亚洲av人人夜夜澡人人 | 日本最新中文字幕 | 天天干天天舔天天射 | 亚洲视频天堂 | 亚洲成在人 | 日韩色吧 | 日本在线一级片 | 超碰cc| 黑森林av | 日韩三级久久 | 成人av免费播放 | 久久国产香蕉视频 | 五月激情综合网 | 69久久精品无码一区二区 | 黄色大片免费网站 | 97人妻精品一区二区三区视频 | 亚洲国产精品无码久久久久高潮 | 欧美性xxxx | 欧美三级三级三级爽爽爽 | 手机在线视频一区 | 巨乳美女被爆操 | 在线观看自拍 | 奇米影视在线播放 | 国内偷拍久久 | 日本在线播放一区 | 可以免费观看的av网站 | 亚洲一区二区三区高清 | 91精品国产91久久久久久黑人 |