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.训练过程:(因为数据是随机生成的,只是为了试验模型,所以误差大小不用理会啦!)

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