深度学习之keras (一) 初探
生活随笔
收集整理的這篇文章主要介紹了
深度学习之keras (一) 初探
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
之前一段時間里,學習過tensorflow和Pytorch也寫了點心得,目前是因為項目原因用了一段時間Keras,覺得很不錯啊,至少從入門來說對新手極度友好,由于keras是基于tensoflow的基礎,相當于tensorflow的高級API吧!(如果理解有錯可以在下方評論糾正博主哈!)
一、安裝
安裝很簡單,也是基于tensorflow的前提下(如果有疑問,請參考博主之前的博客),
pip install keras二、應用示例
# -*- coding: utf-8 -*- # ============================================================================= # #在線下載 # from keras.datasets import mnist # (X_train,Y_train),(X_test,Y_test) = mnist.load_data() # # print("train:%d imgs"%len(X_train)) # print("test:%d imgs"%len(X_test)) # ============================================================================= online_or_not =False #本地讀取 from tensorflow.examples.tutorials.mnist import input_data import numpy as npimport matplotlib.pyplot as plt from PIL import Imagedef show_mnist(train_image,train_labels):n = 3m = 3for i in range(n):for j in range(m):plt.subplot(n,m,i*n+j+1)#plt.subplots_adjust(wspace=0.2, hspace=0.8)index = i * n + j #當前圖片的標號img_array = train_image[index]*255img = Image.fromarray(img_array)plt.title(train_labels[index])plt.imshow(img,cmap='Greys')plt.show()#show_mnist(x_train, y_train)# coding: utf-8 from keras.datasets import mnist from keras.utils import np_utils from keras.models import Sequential from keras.layers import Dense, Activation, Convolution2D, MaxPooling2D, Flatten from keras.optimizers import Adam np.random.seed(1337)"""mnist數據集的label本身進行了one-hot標簽化處理""" if online_or_not:# download the mnist(X_train, Y_train), (X_test, Y_test) = mnist.load_data()# data pre-processingX_train = X_train.reshape(-1, 1, 28, 28)/255X_test = X_test.reshape(-1, 1, 28, 28)/255Y_train = np_utils.to_categorical(Y_train, num_classes=10)Y_test = np_utils.to_categorical(Y_test, num_classes=10) else:X_train = []X_test = []print("train:%d imgs"%len(X_train)) print("test:%d imgs"%len(X_test))# build CNN model = Sequential()# conv layer 1 output shape(32, 28, 28) model.add(Convolution2D(filters=32,kernel_size=5,strides=1,padding='same',batch_input_shape=(None, 1, 28, 28),data_format='channels_first')) model.add(Activation('relu'))# pooling layer1 (max pooling) output shape(32, 14, 14) model.add(MaxPooling2D(pool_size=2, strides=2, padding='same', data_format='channels_first'))# conv layer 2 output shape (64, 14, 14) model.add(Convolution2D(64, 5, strides=1, padding='same', data_format='channels_first')) model.add(Activation('relu'))# pooling layer 2 (max pooling) output shape (64, 7, 7) model.add(MaxPooling2D(2, 2, 'same', data_format='channels_first'))# full connected layer 1 input shape (64*7*7=3136), output shape (1024) model.add(Flatten()) model.add(Dense(1024)) model.add(Activation('relu'))# full connected layer 2 to shape (10) for 10 classes model.add(Dense(10)) model.add(Activation('softmax'))model.summary() # define optimizer adam = Adam(lr=1e-4) model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])# training print ('Training') model.fit(X_train, Y_train, epochs=1, batch_size=128)# testing print ('Testing') loss, accuracy = model.evaluate(X_test, Y_test) print ('loss, accuracy: ', (loss, accuracy))三、模型可視化
from tensorflow.examples.tutorials.mnist import input_data import numpy as np import matplotlib.pyplot as plt from PIL import Image from keras.datasets import mnist from keras.utils import np_utils from keras.models import Sequential from keras.layers import Dense, Activation, Convolution2D, MaxPooling2D, Flatten from keras.optimizers import Adam #模型可視化引入 import keras.callbacks import tensorflow as tf np.random.seed(1337)(X_train, Y_train), (X_test, Y_test) = mnist.load_data()# data pre-processing X_train = X_train.reshape(-1, 1, 28, 28)/255 X_test = X_test.reshape(-1, 1, 28, 28)/255 Y_train = np_utils.to_categorical(Y_train, num_classes=10) Y_test = np_utils.to_categorical(Y_test, num_classes=10)# build CNN def build_model():model = Sequential()# conv layer 1 output shape(32, 28, 28)model.add(Convolution2D(filters=32,kernel_size=5,strides=1,padding='same',batch_input_shape=(None, 1, 28, 28),data_format='channels_first'))model.add(Activation('relu'))# pooling layer1 (max pooling) output shape(32, 14, 14)model.add(MaxPooling2D(pool_size=2, strides=2, padding='same', data_format='channels_first'))# conv layer 2 output shape (64, 14, 14)model.add(Convolution2D(64, 5, strides=1, padding='same', data_format='channels_first'))model.add(Activation('relu'))# pooling layer 2 (max pooling) output shape (64, 7, 7)model.add(MaxPooling2D(2, 2, 'same', data_format='channels_first'))# full connected layer 1 input shape (64*7*7=3136), output shape (1024)model.add(Flatten())model.add(Dense(1024))model.add(Activation('relu'))# full connected layer 2 to shape (10) for 10 classesmodel.add(Dense(10))model.add(Activation('softmax'))model.summary()return model model = build_model() # define optimizer adam = Adam(lr=1e-4) model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])#模型可視化 tb_config = keras.callbacks.TensorBoard(log_dir= 'E:/python/kerascode/mnist_cnn/logs', write_images= 1, histogram_freq= 0) cbks = [tb_config]# training print ('Training') #模型可視化需要加入“callbacks= cbks” model.fit(X_train, Y_train, epochs=1, callbacks= cbks, batch_size=512)# testing print ('Testing') loss, accuracy = model.evaluate(X_test, Y_test) print ('loss, accuracy: ', (loss, accuracy))會在?log_dir= 'E:/python/kerascode/mnist_cnn/logs'該文件夾處生成events.out.tfevents.1566199816.ZD 訓練日志,打開Anaconda Prompt,激活對應的環境,定位到logs文件的上一級目錄,如下圖所示,輸入
tensorboard --logdir=AB(此處AB即上文中的logs文件夾名稱)。
將網址復制到谷歌瀏覽器中即可,結果如下圖所示:
四、模型可視化踩坑
from keras.utils.vis_utils import plot_model from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation from keras.layers.embeddings import Embedding from keras.layers.recurrent import LSTMmodel = Sequential() model.add(Embedding(input_dim=1024, output_dim=256, input_length=50)) model.add(LSTM(128)) # try using a GRU instead, for fun model.add(Dropout(0.5)) model.add(Dense(1)) model.add(Activation('sigmoid'))plot_model(model, to_file='model1.png', show_shapes=True)這個過程會報錯,
raise ImportError('Failed to import `pydot`. ''Please install `pydot`. ''For example with `pip install pydot`.')作為一個菜雞,只能查到是導入pydot發生錯誤,很尷尬!還好有個博客大佬,教會如何改錯。
打開vis_utils.py文件,將相應地方注釋并加入下列代碼
# `pydot` is an optional dependency, # see `extras_require` in `setup.py`. # ============================================================================= # try: # import pydot # except ImportError: # pydot = None # ============================================================================= try:import pydot_ng as pydot except ImportError:try:import pydotplus as pydotexcept ImportError:try:import pydotexcept ImportError:pydot=None參考文獻:
https://blog.csdn.net/xu_haim/article/details/84981284
總結
以上是生活随笔為你收集整理的深度学习之keras (一) 初探的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据技术原理与应用——期末复习
- 下一篇: 某简单易懂的人脸识别 API 的开发环境