亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

theano學習筆記(一):Classifying MNIST digits using Logistic Regression

2019-11-11 05:11:17
字體:
來源:轉載
供稿:網友

keras用得比較多,但是有時keras用起來不是很順手。因為keras是基于theano或TensorFlow的,所以趁假期有空,先看看theano。

Classifying MNIST digits using Logistic Regression 官方文檔:http://deeplearning.net/tutorial/logreg.html

一. 任務描述

用Logistic Regression回歸做手寫體數字識別,用theano實現。

二. 問題建模

Logistic Regression是一個線性的分類器,該模型包含權值矩陣W和偏移向量b。則輸入數據x對應著分類為i的概率可以表示為: P(Y=i|x,W,b)=softmaxi(Wx+b)=eWix+bi∑jeWjx+bj 最后預測的類別為: yPRed=argmaxip(Y=i|x,W,b) 對于數據集D似然函數L,損失函數l可以表示為: L(θ={W,b},D)=∑i=0|D|log(P(Y=y(i)|x(i),W,b)) l(θ={W,b},D)=?L(θ={W,b},D)

三. 數據集

本實驗用的數據集和之前一篇博客用的數據集一樣,具體可以參考:http://blog.csdn.net/whai362/article/details/51813404 對于每個數字是一張28×28的灰度圖,這里的做法是直接拉成784維的向量,然后歸一化作為輸入數據x,具體處理方法詳見代碼。

四. 依賴的第三方庫

Theano 0.8.2OpenCV 3.0Python 2.7

五. 實驗代碼

file_util.pyimport osdef read_dir(root, suffix = 'null'): file_path_list = [] for file_path, dirs, files in os.walk(root): for file in files: if suffix != 'null' and not (file.find(suffix) >= 0 and file.find(suffix) < len(file)): continue file_path_list.append(os.path.join(file_path, file)) file_path_list.sort() return file_path_listdef read_file(file_path): file_object = open(file_path, 'r') file_content = file_object.read() file_object.close() return file_content.decode('utf-8', 'ignore')def write_file(file_path, file_content): file_object = open(file_path, 'w') file_object.write(file_content) file_object.close()theano_logistic.pyimport theanoimport theano.tensor as Timport cv2import numpyimport timeitimport file_utilclass LogisticRegression(object): def __init__(self, input, n_in, n_out): self.W = theano.shared( value = numpy.zeros((n_in, n_out), dtype = theano.config.floatX), name = 'W', borrow = True) self.b = theano.shared( value = numpy.zeros((n_out,), dtype = theano.config.floatX), name = 'b', borrow = True) self.p_y_given_x = T.nnet.softmax(T.dot(input, self.W) + self.b) self.y_pred = T.argmax(self.p_y_given_x, axis = 1) self.params = [self.W, self.b] self.input = input def negative_log_likelihood(self, y): return -T.mean(T.log(self.p_y_given_x)[T.arange(y.shape[0]), y]) def errors(self, y): if y.ndim != self.y_pred.ndim: raise TypeError( 'y should have the same shape as self.y_pred', ('y', y.type, 'y_pred', self.y_pred.type)) if y.dtype.startswith('int'): return T.mean(T.neq(self.y_pred, y)) else: raise NotImplementedError()def shared_data(data, borrow=True): shared = theano.shared( numpy.asarray(data, dtype = theano.config.floatX), borrow = borrow) return shareddef load_data(data_path): img_path_list = file_util.read_dir(data_path) img_num = len(img_path_list) data = [] label = [] for img_path in img_path_list: img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE) data.append(img.reshape((img.shape[0] * img.shape[1])) / 255.0) label.append((int)(img_path.split('/')[-1].split('.')[0])) data = numpy.mat(data) label = numpy.array(label) # print data.shape # print label.shape idx = numpy.random.permutation(img_num) data = data[idx] label = label[idx] train_data, valid_data, test_data = data[:img_num / 3], data[img_num / 3:img_num * 2 / 3], data[img_num * 2 / 3:] train_label, valid_label, test_label = label[:img_num / 3], label[img_num / 3:img_num * 2 / 3], label[img_num * 2 / 3:] # print train_data.shape # print valid_data.shape # print test_data.shape return train_data, train_label, valid_data, valid_label, test_data, test_labeldef sgd_optimization_mnist(data_path, learning_rate = 0.13, n_epochs = 1000, batch_size = 600): train_data, train_label, valid_data, valid_label, test_data, test_label = load_data(data_path) n_train_batches = train_data.shape[0] // batch_size n_valid_batches = valid_data.shape[0] // batch_size n_test_batches = test_data.shape[0] // batch_size print('Building the model...') index = T.lscalar() x = T.matrix('x') y = T.ivector('y') classifier = LogisticRegression(input = x, n_in = 28 * 28, n_out = 10) cost = classifier.negative_log_likelihood(y) test_model = theano.function( inputs = [index], outputs = classifier.errors(y), givens = { x: shared_data(test_data)[index * batch_size: (index + 1) * batch_size], y: T.cast(shared_data(test_label), 'int32')[index * batch_size: (index + 1) * batch_size] }) validate_model = theano.function( inputs = [index], outputs = classifier.errors(y), givens = { x: shared_data(valid_data)[index * batch_size: (index + 1) * batch_size], y: T.cast(shared_data(valid_label), 'int32')[index * batch_size: (index + 1) * batch_size] }) g_W = T.grad(cost = cost, wrt = classifier.W) g_b = T.grad(cost = cost, wrt = classifier.b) updates = [(classifier.W, classifier.W - learning_rate * g_W), (classifier.b, classifier.b - learning_rate * g_b)] train_model = theano.function( inputs = [index], outputs = cost, updates = updates, givens = { x: shared_data(train_data)[index * batch_size: (index + 1) * batch_size], y: T.cast(shared_data(train_label), 'int32')[index * batch_size: (index + 1) * batch_size] }) patience = 5000 patience_increase = 2 improvement_threshold = 0.995 validation_frequency = min(n_train_batches, patience // 2) best_validation_loss = numpy.inf test_score = 0. start_time = timeit.default_timer() done_looping = False epoch = 0 while (epoch < n_epochs) and (not done_looping): epoch = epoch + 1 for minibatch_index in range(n_train_batches): minibatch_avg_cost = train_model(minibatch_index) iter_num = (epoch - 1) * n_train_batches + minibatch_index if (iter_num + 1) % validation_frequency == 0: validation_losses = [validate_model(i) for i in range(n_valid_batches)] this_validation_loss = numpy.mean(validation_losses) print( 'epoch %i, minibatch %i/%i, validation error %f %%' % (epoch, minibatch_index + 1, n_train_batches, this_validation_loss * 100.)) if this_validation_loss < best_validation_loss: if this_validation_loss < best_validation_loss * improvement_threshold: patience = max(patience, iter_num * patience_increase) best_validation_loss = this_validation_loss test_losses = [test_model(i) for i in range(n_test_batches)] test_score = numpy.mean(test_losses) print(( ' epoch %i, minibatch %i/%i, test error of best model %f %%') % (epoch, minibatch_index + 1, n_train_batches, test_score * 100.)) if patience <= iter_num: done_looping = True break end_time = timeit.default_timer() print( ('Optimization complete with best validation score of %f %%, with test performance %f %%') % (best_validation_loss * 100., test_score * 100.)) print('The code run for %d epochs, with %f epochs/sec' % (epoch, 1. * epoch / (end_time - start_time))) # print n_train_batches, n_valid_batches, n_test_batchesif __name__ == '__main__': numpy.random.seed(123456) sgd_optimization_mnist('E:/ML/KNN/mnist_data/')

六. 實驗結果

這里寫圖片描述

如有錯誤,請指正。


上一篇:kruskal

下一篇:90. Subsets II

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品丝袜在线| 色狠狠av一区二区三区香蕉蜜桃| 97国产在线视频| 97精品国产97久久久久久免费| 国产一区二区三区在线观看视频| 98视频在线噜噜噜国产| 欧美成人手机在线| 亚洲国产婷婷香蕉久久久久久| 91精品久久久久久久久不口人| 亚洲精品久久久久中文字幕二区| 91精品国产91久久| 欧美日韩另类视频| 国产精品久久久久久久久久久久| 欧美激情欧美狂野欧美精品| 欧美成人精品在线播放| 亚洲一区二区三区四区在线播放| 欧美一区二区三区免费视| 日韩中文字幕久久| 亚洲欧美一区二区三区久久| 亚洲另类欧美自拍| 久久综合国产精品台湾中文娱乐网| 668精品在线视频| 日韩精品欧美国产精品忘忧草| 清纯唯美亚洲激情| 视频在线一区二区| 亚洲影影院av| 性欧美xxxx| 欧美第一黄色网| 国产日韩av在线播放| 日韩一区二区精品视频| 亚洲综合色av| 亚洲精品中文字幕av| 久久精品99久久香蕉国产色戒| 国产精品白嫩美女在线观看| 国产欧亚日韩视频| 国产美女扒开尿口久久久| 国产精品久久久久av| 国产在线拍偷自揄拍精品| 97香蕉久久超级碰碰高清版| 国产主播喷水一区二区| 欧美亚洲第一页| 成人羞羞国产免费| 国产啪精品视频网站| www.欧美视频| 亚洲精品国产精品国产自| 色老头一区二区三区| 1769国内精品视频在线播放| 懂色av中文一区二区三区天美| 久久综合久久美利坚合众国| 久久久久久久久久久成人| 最近的2019中文字幕免费一页| 日韩免费在线免费观看| 日韩亚洲在线观看| 中文字幕日韩av电影| 国产日韩换脸av一区在线观看| 一区二区福利视频| 亚洲综合色激情五月| 91精品国产综合久久香蕉的用户体验| 亚洲欧美综合图区| 欧美做受高潮1| 中文在线不卡视频| 亚洲天堂成人在线| 精品在线欧美视频| 欧美电影免费在线观看| 成人福利在线观看| 日韩av在线免播放器| 成人在线视频网站| 亚洲精品日韩久久久| 亚洲国产精品人人爽夜夜爽| 国产精品久久激情| 成人乱色短篇合集| 欧美精品videosex极品1| 性色av一区二区三区红粉影视| 欧美天堂在线观看| 国产视频精品一区二区三区| 九九精品视频在线观看| 国产美女搞久久| 欧美黑人xxxx| 国产精品久久激情| 欧美激情在线视频二区| 国产欧美精品在线| 国产丝袜一区二区| 亚洲精品国产品国语在线| 亚洲成**性毛茸茸| 欧美精品在线网站| 国产精品日韩欧美综合| 日韩不卡中文字幕| xxxxx91麻豆| 欧美第一黄色网| 欧美日韩亚洲高清| 91美女高潮出水| 亚洲欧美变态国产另类| 精品国偷自产在线| 成人有码视频在线播放| 亚洲区一区二区| 韩国三级电影久久久久久| 奇门遁甲1982国语版免费观看高清| 国产69精品久久久久9999| 国产91色在线|| 国产精品日韩欧美| 久久视频国产精品免费视频在线| 欧美日韩免费看| 尤物九九久久国产精品的分类| 国产精品久久久久高潮| 狠狠爱在线视频一区| 成人免费在线网址| 亚洲深夜福利在线| 日本免费久久高清视频| 日本久久久久亚洲中字幕| 91社区国产高清| 久久亚洲成人精品| 亚洲色图综合网| 亚洲综合精品一区二区| 最新亚洲国产精品| 性欧美办公室18xxxxhd| 成人精品视频99在线观看免费| 日韩欧美在线视频日韩欧美在线视频| 久久av红桃一区二区小说| 日韩精品视频在线播放| 国产精品入口福利| 久久久噜久噜久久综合| 欧美电影免费观看大全| 欧美激情一区二区三级高清视频| 欧美亚洲视频在线观看| 亚洲第一精品自拍| 91在线观看免费高清| 久久久www成人免费精品张筱雨| 午夜美女久久久久爽久久| 欧美肥婆姓交大片| 91久久国产精品| 日韩欧美精品中文字幕| 精品美女久久久久久免费| 精品香蕉在线观看视频一| 国产成人精品日本亚洲| 久久久久久久久久国产| 亚洲精品国产精品乱码不99按摩| 97在线免费观看视频| 日韩精品免费综合视频在线播放| 精品国产欧美一区二区三区成人| 日韩av第一页| 亚洲国产又黄又爽女人高潮的| 久久九九免费视频| 动漫精品一区二区| 九九热r在线视频精品| 尤物yw午夜国产精品视频| 国产日韩欧美夫妻视频在线观看| 色偷偷888欧美精品久久久| 91精品国产自产91精品| 欧洲美女7788成人免费视频| xxxxxxxxx欧美| 日韩美女在线播放| 亲子乱一区二区三区电影| 国产激情999| 超碰精品一区二区三区乱码| 91精品国产综合久久男男| 欧美香蕉大胸在线视频观看| 欧美日韩中文字幕在线视频| 亚洲激情视频在线| 国精产品一区一区三区有限在线| 一区二区三区亚洲| 这里只有精品视频在线| 亚洲春色另类小说| 欧美成年人网站| 久久影视电视剧凤归四时歌|