目前想建一个系统,dw进行前端设计,mysql数据库存储数据,pycharm训练了一个cnn模型,但是不知道模型怎么应用到系统中,两者如何连接没有头绪,想实现系统中提出问题,然后神经网络对问题进行分析,最后再返回结果。有什么方法或者教程推荐吗?
首先,在你的系统中加载训练好的模型;然后,在你的系统中接收问题;之后,调用你的神经网络算法;最后,将算法的结果返回给用户。调用神经网络算法的时候会用到接收的问题和加载的模型。可以参考我博客中“神经网络连子棋”的例子,我的博文中有写到加载和使用“确定性神经网络”连子棋模型的内容。
深度学习模型放进函数里面,需要就调用函数
保存.H5文件给系统调用
前端请求后端,后端获取数据,输入模型,获得输出结果返回前端或者保存到数据库。难点就模型应用嵌入到后端中一个。python可以用flask这个框架搭后端,轻量级的。
当然如果你够nb,你可以把你的模型封装到前端中,百度的paddle.js好像有这个功能。
以cnn人脸表情识别案例为例,训练好模型,使用模型预测新的人脸表情识别:
步骤一:划分数据集,数据集部分用来训练模型,部分用来验证模型的准确率
X = np.load(r"D:\FER2013\aaa\ffff\8-8/fer-mouth.npy")/255
Y = np.load(r"D:\FER2013\aaa\ffff\8-8/fer-mouth-label.npy")
X = X[:, :, :, np.newaxis]
# Training
max_test_acu = 0
test_all = []
train_all = []
ss = []
for i in range(4):
prediction = []
test_X = X[1000 * i:1000 * i + 1000, :, :, :]
np.save(r'D:\FER2013\aaa\ffff\8-8/' + "test" + str(i) + "-" + "img", test_X)
test_Y = Y[1000 * i:1000 * i + 1000, :]
np.save(r'D:\FER2013\aaa\ffff\8-8/' + "test" + str(i) + "-" + "label", test_Y)
train_X = np.delete(X, range(1000 * i, 1000 * i + 1000), axis=0)
np.save(r'D:\FER2013\aaa\ffff\8-8/' + "train" + str(i) + "-" + "img", train_X)
train_Y = np.delete(Y, range(1000 * i, 1000 * i + 1000), axis=0)
np.save(r'D:\FER2013\aaa\ffff\8-8/' + "train" + str(i) + "-" + "label", train_Y)
test_acu = []
train_acu = []
步骤二:构造cnn模型
def net():
img_prep = tflearn.ImagePreprocessing()
img_prep.add_featurewise_zero_center()
img_prep.add_featurewise_stdnorm()
# img_aug = tflearn.ImageAugmentation()
# img_aug.add_random_flip_leftright()
# img_aug.add_random_blur()
# img_aug.add_random_rotation(5.0)
network = input_data(shape=[None, 48, 48, 1])
# network = conv_2d(network, 64, 3, activation='relu')
# network = max_pool_2d(network, 3, strides=2)
# network = batch_normalization(network)
# conv1_7_7 = conv_2d(network, 64, 7, strides=2, activation='relu', name='conv1_7_7_s2')
# pool1_3_3 = max_pool_2d(conv1_7_7, 3, strides=2)
# pool1_3_3 = local_response_normalization(pool1_3_3)
# conv2_3_3_reduce = conv_2d(pool1_3_3, 64, 1, activation='relu', name='conv2_3_3_reduce')
# conv2_3_3 = conv_2d(conv2_3_3_reduce, 192, 3, activation='relu', name='conv2_3_3')
# conv2_3_3 = local_response_normalization(conv2_3_3)
# pool2_3_3 = max_pool_2d(conv2_3_3, kernel_size=3, strides=2, name='pool2_3_3_s2')
# 3a
# inception_3a_1_1 = conv_2d(network, 64, 1, activation='relu')
## inception_3a_1_1 = batch_normalization(inception_3a_1_1 )
# inception_3a_3_3_reduce = conv_2d(network, 96, 1, activation='relu', name='inception_3a_3_3_reduce')
## inception_3a_3_3_reduce = batch_normalization(inception_3a_3_3_reduce )
# inception_3a_3_3 = conv_2d(inception_3a_3_3_reduce, 128, filter_size=3, activation='relu')
# inception_3a_5_5_reduce = conv_2d(network, 16, filter_size=1, activation='relu', name='inception_3a_5_5_reduce')
# inception_3a_5_5 = conv_2d(inception_3a_5_5_reduce, 32, filter_size=5, activation='relu', name='inception_3a_5_5')
# inception_3a_pool = max_pool_2d(network, kernel_size=3, strides=1)
## inception_3a_3_3_reduce = batch_normalization(inception_3a_pool )
# inception_3a_pool_1_1 = conv_2d(inception_3a_pool, 32, filter_size=1, activation='relu')
# inception_3a_output = merge([inception_3a_1_1, inception_3a_3_3, inception_3a_5_5, inception_3a_pool_1_1],
# mode='concat', axis=3)
# network1 = max_pool_2d(inception_3a_output, kernel_size=3, strides=2, name='pool3_3_3')
# network1 = batch_normalization( network1)
# # 3b
# inception_3b_1_1 = conv_2d(inception_3a_output, 128, filter_size=1, activation='relu', name='inception_3b_1_1')
# inception_3b_3_3_reduce = conv_2d(inception_3a_output, 128, filter_size=1, activation='relu',
# name='inception_3b_3_3_reduce')
# inception_3b_3_3 = conv_2d(inception_3b_3_3_reduce, 192, filter_size=3, activation='relu', name='inception_3b_3_3')
# inception_3b_5_5_reduce = conv_2d(inception_3a_output, 32, filter_size=1, activation='relu',
# name='inception_3b_5_5_reduce')
# inception_3b_5_5 = conv_2d(inception_3b_5_5_reduce, 96, filter_size=5, name='inception_3b_5_5')
# inception_3b_pool = max_pool_2d(inception_3a_output, kernel_size=3, strides=1, name='inception_3b_pool')
# inception_3b_pool_1_1 = conv_2d(inception_3b_pool, 64, filter_size=1, activation='relu',
# name='inception_3b_pool_1_1')
# inception_3b_output = merge([inception_3b_1_1, inception_3b_3_3, inception_3b_5_5, inception_3b_pool_1_1],
# mode='concat', axis=3, name='inception_3b_output')
# network1 = max_pool_2d(inception_3b_output, kernel_size=3, strides=2, name='pool3_3_3')
# network = fully_connected(network1, 2048, activation='tanh')
# network = dropout(network, 0.5)
# network = fully_connected(network, 1024, activation='tanh')
# network = dropout(network, 0.5)
# # network = fully_connected(network, 2, activation='softmax',restore=False)
# network = fully_connected(network, 2, activation='softmax')
network = conv_2d(network, 64, 3,activation='relu' ) #22*22*32
network = max_pool_2d(network, 3, strides=2) #11*11*32
network = batch_normalization(network)
network = conv_2d(network, 96, 3, activation='relu') #11*11*96
network = max_pool_2d(network, 3, strides=2) # 5*5*96
network = batch_normalization(network)
# network = conv_2d(network, 128, 3, activation='relu')
# network = conv_2d(network, 96, 5, activation='relu')
# network = fully_connected(network, 256, activation='tanh' )
# network = dropout(network, 0.5)
network = conv_2d(network, 96, 1, activation='relu') #11*11*96
# network = fully_connected(network, 1024, activation='tanh' )
network = dropout(network, 0.5)
# network = fully_connected(network, 2, activation='softmax')
network = fully_connected(network, 2, activation='softmax',restore=False)
# network = regression(network, optimizer=tflearn.optimizers.Momentum(lr_decay=0.96),
# loss='categorical_crossentropy',
# learning_rate=0.001)
# network = max_pool_2d(network, 3, strides=2) # 5*5*96
# network = batch_normalization(network)
# network = regression(network,optimizer='momentum',loss='categorical_crossentropy',learning_rate=0.001)
# network = regression(network,optimizer=tflearn.optimizers.Momentum(lr_decay=0.96),loss='categorical_crossentropy',learning_rate=0.0001)
network = regression(network, optimizer=tflearn.optimizers.Momentum(lr_decay=0.96, decay_step=2000),
loss='categorical_crossentropy',
learning_rate=0.001)
return network
步骤三:训练模型,预测模型准确率,并保存训练的结果
test_acu = []
train_acu = []
tf.reset_default_graph()
network = net()
model = tflearn.DNN(network, checkpoint_path='model_alexnet',
max_checkpoints=1, tensorboard_verbose=0)
# model.load("D:/train/fei/yu_Model.tfl")
for j in range(100):
print("********")
print(i)
model.fit(train_X, train_Y, n_epoch=1, shuffle=True,
show_metric=True, batch_size=8, snapshot_step=1000,
snapshot_epoch=False, run_id='alexnet_fer2013')
acu_train = model.evaluate(train_X, train_Y)
acu_test = model.evaluate(test_X, test_Y)
train_acu.append(acu_train[0])
test_acu.append(acu_test[0])
# for index in range(len(test_X)):
# test_X1=test_X[index]
# test_X2=test_X1.reshape(1,48,48,1)
# a=model.predict(test_X2)
# prediction.append(a)
# prediction1=np.array(prediction)
# np.save('D:/toupiao'+str(i)+"-prediction1.npy",prediction1)
## for index in range(len(test_X)):
## test_X=test_X[index:index+1,:,:,:]
# test_X1=test_X[index]
## test_X1=test_X[0]
# test_X2=test_X1.reshape(1,48,48,1)
# a=model.predict(test_X2)
#
#
# prediction.append(a)
if acu_test[0] > max_test_acu:
max_test_acu = acu_test[0]
model.save(r'D:\FER2013\aaa\ffff\8-8/' + str(j) + "-" + str(i) + "new_model.tfl")
for index in range(len(test_X)):
test_X1 = test_X[index]
test_X2 = test_X1.reshape(1, 48, 48, 1)
a = model.predict(test_X2)
prediction.append(a)
prediction1 = np.array(prediction)
np.save(r'D:\FER2013\aaa\ffff\8-8/' + str(i) + "-prediction1.npy", prediction1)
else:
continue
# for index in range(len(test_X)):
# test_X1=test_X[index]
# test_X2=test_X1.reshape(1,48,48,1)
# a=model.predict(test_X2)
# prediction.append(a)
# prediction1=np.array(prediction)
# np.save('D:/tou_piao/'+str(i)+"-prediction1.npy",prediction1)
# if(acu_test>max_test_acu):
# model.save("D:/train/aa/"+str(i)+"-new_model.tfl")
test_all.append(test_acu)
train_all.append(train_acu)
aaa = np.array(test_all).reshape(4, 100)
bbb = np.array(train_all).reshape(4, 100)
np.save(r'D:\FER2013\aaa\ffff\8-8/test_all.npy', aaa)
np.save(r'D:\FER2013\aaa\ffff\8-8/train_all.npy', bbb)
步骤四:计算四轮训练每次最大的准确率,求平均得到准确率
s = 0
avg = 0
for m in range(4):
avg = avg + max(aaa[m])
s = max(aaa[m])
ss.append(s)
ss = np.array(ss)
np.save(r'D:\FER2013\aaa\ffff\8-8/test.npy', ss)
# np.save('x_shuffle.npy',X)
# np.save('y_shuffle.npy',Y)
print("*********avg")
print(avg / 4)
print("**^^^")
print(ss)
# result_all=np.vstack((result1,result2,resul
步骤五:保存训练好的模型
model.save(r"D:\FER2013\aaa\ffff\8-8/FCN.tfl")
步骤六:加载训练好的模型,使用模型预测新的人脸表情图片,输出人脸表情识别结果
如何调用训练好的tensorflow神经网络模型
https://learnku.com/python/t/55815