畫出卷積神經網絡結構圖

  • 使用Keras框架(后端可選tensorflow或者theano),可以畫出卷積神經網絡的結構圖幫助我們理解或確認自己創立的模型。
  • 問題的關鍵在于使用from keras.utils.visualize_util import plot中的plot函數。
    但是直接使用會提示缺少pydot。
    首先安裝sudo pip3 install pydot以及sudo apt-get install graphviz(在Ubuntu上)。
  • 但是會提示一個和新版keras的兼容問題。于是我們需要安裝sudo pip3 install pydot-ng來解決這個問題。
  • 現在就可以畫出結構圖了:

使用樣例一

from keras.layers import Input, Convolution2D, Flatten, Dense, Activation
from keras.models import Sequential
from keras.optimizers import SGD , Adam
from keras.initializations import normal
from keras.utils.visualize_util import plot

# apply a 3x3 convolution with 64 output filters on a 256x256 image:
model = Sequential()
model.add(Convolution2D(64, 3, 3, border_mode='same', dim_ordering='th',input_shape=(3, 256, 256)))
# now model.output_shape == (None, 64, 256, 256)

# add a 3x3 convolution on top, with 32 output filters:
model.add(Convolution2D(32, 3, 3, border_mode='same', dim_ordering='th'))
# now model.output_shape == (None, 32, 256, 256)
adam = Adam(lr=1e-6)
model.compile(loss='mse',optimizer=adam)
print("We finish building the model")

plot(model, to_file='model1.png', show_shapes=True)
樣例一

使用樣例二

from keras.layers import Input, Convolution2D, MaxPooling2D, Flatten, Dense
from keras.models import Model
from keras.utils.visualize_util import plot

inputs = Input(shape=(229, 229, 3))

x = Convolution2D(32, 3, 3, subsample=(2, 2), border_mode='valid', dim_ordering='tf')(inputs)

x = Flatten()(x)
loss = Dense(32, activation='relu', name='loss')(x)
model = Model(input=inputs, output=loss)
model.compile(optimizer='rmsprop', loss='binary_crossentropy')

# visualize model layout with pydot_ng
plot(model, to_file='model2.png', show_shapes=True)
樣例二

使用樣例三

from keras.layers import Input, Convolution2D, Flatten, Dense, Activation
from keras.models import Sequential
from keras.optimizers import SGD , Adam
from keras.initializations import normal
from keras.utils.visualize_util import plot

print("Now we build the model")
model = Sequential()
img_channels = 4 #output dimenson nothing with channels
img_rows = 80
img_cols = 80
model.add(Convolution2D(32, 8, 8, subsample=(4,4),init=lambda shape, name: normal(shape, scale=0.01, name=name), border_mode='same', dim_ordering='th',input_shape=(img_channels,img_rows,img_cols)))
model.add(Activation('relu'))
model.add(Convolution2D(64, 4, 4, subsample=(2,2),init=lambda shape, name: normal(shape, scale=0.01, name=name), border_mode='same', dim_ordering='th'))
model.add(Activation('relu'))
model.add(Convolution2D(64, 3, 3, subsample=(1,1),init=lambda shape, name: normal(shape, scale=0.01, name=name), border_mode='same', dim_ordering='th'))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(512, init=lambda shape, name: normal(shape, scale=0.01, name=name)))
model.add(Activation('relu'))
model.add(Dense(2,init=lambda shape, name: normal(shape, scale=0.01, name=name)))

adam = Adam(lr=1e-6)
model.compile(loss='mse',optimizer=adam)
print("We finish building the model")

plot(model, to_file='model3.png', show_shapes=True)
model3
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容