Keras搭建模型

同時訓練兩個網絡“同時”!我的第一想法是用最底層的C / C ++編程實現神經網絡。後來,在微信公衆號上搜到了keras融合層!合併,真是太驚奇!可是大家不要使用合併,因爲這個keras已經不支持了的趕腳。


好了,上代碼了。敲黑板!

import keras
import numpy as np
from keras.utils import plot_model
import matplotlib.pyplot as plt

# 第一個網絡模型
# 輸入爲16維
input1 = keras.layers.Input(shape=(16,))
layer_1 = keras.layers.Dense(8, activation='relu')(input1)
layer_2 = keras.layers.Dense(1, activation='relu')(layer_1)

# 第二個網絡模型
# 輸入爲32維
input2 = keras.layers.Input(shape=(32,))
layer_3 = keras.layers.Dense(8, activation='relu')(input2)
layer_4 = keras.layers.Dense(1, activation='relu')(layer_3)

# 模型結果求和(也有求差、求積、求商......)
add = keras.layers.Add()([layer_2, layer_4])

# 最後以4維的向量輸出
out = keras.layers.Dense(4)(add)

# 利用Model搭建模型
model = keras.models.Model(inputs=[input1, input2], outputs=out)

# 編譯模型
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

# 輸入和輸出數據
x1 = np.random.random((1000, 16))
x2 = np.random.random((1000, 32))
y = np.random.randint(10, size=(1000, 4))

# 訓練模型,並保存訓練過程的細節
history = model.fit([x1, x2], y, batch_size=32, epochs=100, verbose=1,
                callbacks=None, validation_split=0.1,
                validation_data=None, shuffle=True,
                class_weight=None, sample_weight=None,
                initial_epoch=0)

# 打印模型信息
model.summary()

# 將模型保存爲圖像文件
plot_model(model, show_shapes = True, show_layer_names = True, to_file = 'Merge.png')

# 繪製訓練圖像
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epochs')
plt.legend(['train', 'validate'], loc='upper right')
plt.show()

這是一份簡易的代碼,實際我的程序很長,不管是我神經網絡的層數,輸入的個數,輸入和輸出的數據,都要比這個模型複雜,這個僅僅作爲參考,用keras搭建一個神經網絡真的只需要30秒經過100次的整體訓練,得到的結果如下!

1.模型的文字信息

2.模型的圖片信息:想要生成這種文件形式的模型,需要安裝Graphviz的,pydot組件!

3.訓練過程:(因爲數據是隨機生成的,只是爲了試驗模型,所以誤差大小不用理會啦!)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章