尚义网站建设,济南做网站比较好的,不用流量的地图导航软件,西宁做网站君博先进呼延灼举荐了百胜将韩滔和天目将彭玘做先锋。
两军对战#xff0c;韩滔和秦明斗二十回合#xff0c;呼延灼与林冲斗在一起#xff0c;花荣与彭玘斗在一处#xff0c;后彭玘与一丈青扈三娘斗在一起#xff0c;被扈三娘抓住。 尽管梁山占优#xff0c;宋江也没有乘胜追击韩滔和秦明斗二十回合呼延灼与林冲斗在一起花荣与彭玘斗在一处后彭玘与一丈青扈三娘斗在一起被扈三娘抓住。 尽管梁山占优宋江也没有乘胜追击因为呼延灼带的是连环马马带马甲人披铁铠射箭都不顶用。打完后宋江亲自给彭玘解绑送到大寨。
第二天呼延灼又列出连环马冲杀宋江被李逵护着逃到水边被李俊、张横、张顺、三阮接到战船上才逃脱。小兵折损大半幸好头领们都还在。山下的四间酒店也被官兵拆了。大家一点办法也没有晁盖只好下令严防死守。宋江不肯上山亲自坐镇鸭嘴滩。
宋江很多事还是亲历亲为的怪不得大家都服他 人工智能也需要亲自实践一下才行 AI通过构建并训练CNN网络来进行飞机识别 在星河社区2019年的培训课程中有一节课程是通过构建并训练CNN网络来进行飞机识别。课程中有一项作业是通过各种方法增加准确率。这门课程主要面向初学者所以增加准确率的方法主要是调整神经网络的深度和channel值方法很简单但是确实非常有助于初学者对神经网络的理解。 项目地址7天入门深度学习 d2 作业飞机识别 - 飞桨AI Studio星河社区 直接点击然后fork执行即可。 网络结构如图 因为需要飞桨1.6.2环境和相关数据集所以下面的代码只能展示 # 导入依赖包
import sys
import numpy as np# import lr_utils
import matplotlib.pyplot as plt
import paddle
import paddle.fluid as fluid%matplotlib inline# 加载数据, 并展示一张由于数据图片较小所以显示出来比较模糊
train_set_x_orignp.load(data/data1589/traindata.npy)
train_set_ynp.load(data/data1589/trainlabel.npy)
test_set_x_orignp.load(data/data1589/testdata.npy)
test_set_ynp.load(data/data1589/testlabel.npy)
plt.imshow(train_set_x_orig[2])
plt.show()# 输出数据集的信息
m_traintrain_set_x_orig.shape[0]
m_testtest_set_x_orig.shape[0]
num_pxtrain_set_x_orig.shape[1]print (训练样本数: m_train str(m_train))
print (测试样本数: m_test str(m_test))
print (图片高度/宽度: num_px str(num_px))
print (图片大小: ( str(num_px) , str(num_px) , 3))
print (train_set_x shape: str(train_set_x_orig.shape))
print (train_set_y shape: str(train_set_y.shape))
print (test_set_x shape: str(test_set_x_orig.shape))
print (test_set_y shape: str(test_set_y.shape))###因为paddlepaddle认识的数据是3*l*h的所以需要进行数据格式转换
train_set_x np.array(train_set_x_orig).reshape(m_train, 3, num_px, num_px).astype(np.float32)
train_set_y np.array(train_set_y).reshape(m_train, 1).astype(np.float32)
test_set_x np.array(test_set_x_orig).reshape(m_test, 3, num_px, num_px).astype(np.float32)
test_set_y np.array(test_set_y).reshape(m_test, 1).astype(np.float32)#归一化
train_set_xtrain_set_x/ 255.0 * 2.0 - 1.0test_set_xtest_set_x/ 255.0 * 2.0 - 1.0# 读取训练数据或测试数据
def read_data(train_set_x,train_set_y,buffer_size):def reader():for i in range(buffer_size): yield train_set_x[i,:], int(train_set_y[i]) return readerdef convolutional_neural_network():定义卷积神经网络分类器输入的二维图像经过两个卷积-池化层使用以softmax为激活函数的全连接层作为输出层Args:img -- 输入的原始图像数据Return:predict -- 分类的结果img fluid.layers.data(nameimg, shape [3,32,32],dtype float32)#多加了一个卷积池化层最后加了drop以提高准确率降低过拟合
# droped fluid.layers.dropout(img,dropout_prob1)#第一个卷积层# hidden fluid.nets.simple_img_conv_pool(input, num_filters, filter_size, pool_size, pool_stride, pool_padding0)hiddenfluid.nets.simple_img_conv_pool(inputimg,num_filters250,filter_size9,pool_size1,pool_stride1,pool_padding0)#50 10 5 1 0#第二个卷积层
# drop1 fluid.layers.dropout(hidden,dropout_prob0.2)h2fluid.nets.simple_img_conv_pool(inputhidden,num_filters150,filter_size5,pool_size1,pool_stride1,pool_padding0)h3fluid.nets.simple_img_conv_pool(inputh2,num_filters150,filter_size3,pool_size2,pool_stride1,pool_padding0)#50 3 2 1 0drop1 fluid.layers.dropout(h3,dropout_prob0.3)# predict fluid.layers.fc(h2,size1,actsigmoid)predict fluid.layers.fc(drop1,size2,actsoftmax) #softmaxreturn predict #配置网络结构
def train_func():label fluid.layers.data(namelabel, shape [1],dtype int64)predict convolutional_neural_network()# 损失函数cross_entropy 函数内部使用交叉熵损失函数cost fluid.layers.cross_entropy(inputpredict, labellabel)avg_cost fluid.layers.mean(cost)return avg_costdef optimizer_func():# 创建Momentum优化器并设置学习率(learning_rate)、动量(momentum)optimizerfluid.optimizer.Momentum(learning_rate0.0001,momentum0.5)#optimizerfluid.optimizer.Adam(learning_rate0.001,momentum0.5)return optimizerfeed_order [img, label] #数据格式
params_dirname ./DNN_model #模型保存路径# 事件处理函数
from paddle.utils.plot import Ploter
from paddle.fluid.contrib.trainer import EndStepEvent
train_title Train cost
test_title Test cost
plot_cost Ploter(train_title, test_title)step 0
def event_handler_plot(event):global stepif isinstance(event, EndStepEvent):if event.step % 2 0: # 若干个batch,记录costif event.metrics[0] 10:plot_cost.append(train_title, step, event.metrics[0])plot_cost.plot()if event.step % 20 0: # 若干个batch,记录costtest_metrics trainer.test(readertest_reader, feed_orderfeed_order)if test_metrics[0] 10:plot_cost.append(test_title, step, test_metrics[0])plot_cost.plot()# if test_metrics[0] 1.0:
# # 如果准确率达到阈值则停止训练
# print(loss is less than 10.0, stop)
# trainer.stop()if test_metrics[0] 0.001:# 如果准确率达到阈值则停止训练print(loss is less than 10.0, stop)trainer.stop()# 将参数存储用于预测使用if params_dirname is not None:trainer.save_params(params_dirname )step 1#训练所用到的具体数据
#主要是增加了训练量从209提高到5800BATCH_SIZE128
# 设置训练reader
train_reader paddle.batch(paddle.reader.shuffle(read_data(train_set_x,train_set_y,buffer_size5880), #buff原来是209buf_size50),#buf原来是50batch_sizeBATCH_SIZE)
# 设置测试reader
test_reader paddle.batch(paddle.reader.shuffle(read_data(test_set_x,test_set_y,buffer_size2000), buf_size20),#buf原来是20batch_sizeBATCH_SIZE)#创建训练器
from paddle.fluid.contrib.trainer import Trainer
trainer Trainer(train_func train_func,place place,optimizer_func optimizer_func )#开始训练
trainer.train(readertrain_reader,num_epochs60 ,#num 30event_handlerevent_handler_plot,feed_order feed_order )from paddle.fluid.contrib.inferencer import Inferencer
inferencer Inferencer(infer_funcconvolutional_neural_network, param_pathparams_dirname, placeplace)#取出一个 mini-batch
for mini_batch in test_reader(): # 转化为 numpy 的 ndarray 结构并且设置数据类型test_x np.array([data[0] for data in mini_batch]).astype(float32)test_y np.array([data[1] for data in mini_batch]).astype(int64)# 真实进行预测mini_batch_result inferencer.infer({img: test_x})result(mini_batch_result[0][:,-1]0.5)0 #True or False 转0/1直接后面0即可# 打印预测结果
# mini_batch_result np.argsort(mini_batch_result) #找出可能性最大的列标升序排列,###经过分析这是多分类问题会用到的函数找出概率值最大的下标# mini_batch_result mini_batch_result[0][:, -1] #把这些列标拿出来print(预测结果%s%result)# 打印真实结果 label np.array(test_y) # 转化为 labelprint(真实结果%s%label)break # 查看百分比
def right_ratio(right_counter, total):ratio float(right_counter)/totalreturn ratio# 评估函数 data_set 是一个reader
def evl(data_set):total 0 #操作的元素的总数right_counter 0 #正确的元素pass_num 0
# print(liruoyi)for mini_batch in data_set():pass_num 1#预测test_x np.array([data[0] for data in mini_batch]).astype(float32)test_y np.array([data[1] for data in mini_batch]).astype(int64)mini_batch_result inferencer.infer({img: test_x})mini_batch_result(mini_batch_result[0][:,-1]0.5)0 #True or False 转0/1直接后面0即可#预测的结果# mini_batch_result np.argsort(mini_batch_result) #找出可能性最大的列标升序排列# mini_batch_result mini_batch_result[0][:, -1]0 #把这些列标拿出来#print(预测结果%s%result)label np.array(test_y) # 转化为 label# print(真实结果%s%label)#计数label_len len(label)total label_lenfor i in range(label_len):if mini_batch_result[i] label[i]:right_counter 1ratio right_ratio(right_counter, total)return ratioratio evl(train_reader)
print(训练数据的正确率 %0.2f%%%(ratio*100))ratio evl(test_reader)
print(预测数据的正确率 %0.2f%%%(ratio*100)) 提高准确率的方法就是改变卷积的大小和深度。比如原来的卷积大小是10和5 深度是两层最终试出来的卷积大小是9、5和3深度是三层。这也是为什么有人问某某模型为什么参数是xxx我会回答“作者试出来”的原因因为理论只是指导最终大多数模型的参数都是通过实践试出来的哪个最好论文里就写哪个。 大家也可以去修改试试。当然卷积网络还需要注意最终全连接层的参数对应这个在实践中特别容易出问题多练练就好了。 呼延灼从东京汴梁请来了轰天雷凌振。凌振的炮威力很大晁盖派了水路六个头领去捉拿凌振把他也请上了山。
大家商量破连环马的计策金钱豹子汤隆说我有一个计策。需要一个兵器和我的一个哥哥可以破连环马。
欲知后事如何且听下回分解。