用python生成与调用cntk模型代码演示方法


Posted in Python onAugust 26, 2019

由于一些原因,视频录制要告一段落了。再写一篇关于cntk的文章分享出来吧。我也很想将这个事情进行下去。以后如果条件允许还会接着做。

cntk2.0框架生成的模型才可以支持python。1.0不支持。

python可以导入cntk.exe生成的框架,也可以导入python调用cntk生成的框架。举两个例子:

1 、导入cntk.exe生成的框架。

from cntk.ops.functions import load_model
from PIL import Image 
import numpy as np
from sklearn.utils import shuffle

np.random.seed(0)


def generate(N, mean, cov, diff):  
  #import ipdb;ipdb.set_trace()

  samples_per_class = int(N/2)

  X0 = np.random.multivariate_normal(mean, cov, samples_per_class)
  Y0 = np.zeros(samples_per_class)

  for ci, d in enumerate(diff):
    X1 = np.random.multivariate_normal(mean+d, cov, samples_per_class)
    Y1 = (ci+1)*np.ones(samples_per_class)

    X0 = np.concatenate((X0,X1))
    Y0 = np.concatenate((Y0,Y1))

  X, Y = shuffle(X0, Y0)

  return X,Y
mean = np.random.randn(2)
cov = np.eye(2) 
features, labels = generate(6, mean, cov, [[3.0], [3.0, 0.0]])
features= features.astype(np.float32) 
labels= labels.astype(np.int) 
print(features)
print(labels)



z = load_model("MC.dnn")


print(z.parameters[0].value)
print(z.parameters[0])
print(z)
print(z.uid)
#print(z.signature)
#print(z.layers[0].E.shape)
#print(z.layers[2].b.value)
for index in range(len(z.inputs)):
   print("Index {} for input: {}.".format(index, z.inputs[index]))

for index in range(len(z.outputs)):
   print("Index {} for output: {}.".format(index, z.outputs[index].name))

import cntk as ct
z_out = ct.combine([z.outputs[2].owner])

predictions = np.squeeze(z_out.eval({z_out.arguments[0]:[features]}))

ret = list()
for t in predictions:
  ret.append(np.argmax(t))
top_class = np.argmax(predictions)
print(ret)
print("predictions{}.top_class{}".format(predictions,top_class))

上述的代码生成一个.py文件。放到3分类例子中,跟模型一个文件夹下(需要预先用cntk.exe生成模型)。CNTK-2.0.beta15.0\CNTK-2.0.beta15.0\Tutorials\HelloWorld-LogisticRegression\Models

2 、python生成模型和使用自己的模型:

代码如下:

# -*- coding: utf-8 -*-
"""
Created on Mon Apr 10 04:59:27 2017

@author: Administrator
"""

from __future__ import print_function


import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.colors import colorConverter, ListedColormap 
from cntk.learners import sgd, learning_rate_schedule, UnitType #old in learner
from cntk.ops.functions import load_model
from cntk.ops import *  #softmax
from cntk.io import CTFDeserializer, MinibatchSource, StreamDef, StreamDefs


from cntk import * 
from cntk.layers import Dense, Sequential
from cntk.logging import ProgressPrinter


def generate_random_data(sample_size, feature_dim, num_classes):
   # Create synthetic data using NumPy.
   Y = np.random.randint(size=(sample_size, 1), low=0, high=num_classes)

   # Make sure that the data is separable
   X = (np.random.randn(sample_size, feature_dim) + 3) * (Y + 1)
   X = X.astype(np.float32)
   # converting class 0 into the vector "1 0 0",
   # class 1 into vector "0 1 0", ...
   class_ind = [Y == class_number for class_number in range(num_classes)]
   Y = np.asarray(np.hstack(class_ind), dtype=np.float32)
   return X, Y

# Read a CTF formatted text (as mentioned above) using the CTF deserializer from a file
def create_reader(path, is_training, input_dim, num_label_classes):
  return MinibatchSource(CTFDeserializer(path, StreamDefs(
    labels = StreamDef(field='labels', shape=num_label_classes, is_sparse=False),
    features  = StreamDef(field='features', shape=input_dim, is_sparse=False)
  )), randomize = is_training, epoch_size = INFINITELY_REPEAT if is_training else FULL_DATA_SWEEP)   


def ffnet():
  inputs = 2
  outputs = 2
  layers = 2
  hidden_dimension = 50

  # input variables denoting the features and label data
  features = input((inputs), np.float32)
  label = input((outputs), np.float32)

  # Instantiate the feedforward classification model
  my_model = Sequential ([
          Dense(hidden_dimension, activation=sigmoid,name='d1'),
          Dense(outputs)])
  z = my_model(features)

  ce = cross_entropy_with_softmax(z, label)
  pe = classification_error(z, label)

  # Instantiate the trainer object to drive the model training
  lr_per_minibatch = learning_rate_schedule(0.125, UnitType.minibatch)

  # Initialize the parameters for the reader
  input_dim=2
  num_output_classes=2
  num_samples_per_sweep = 6000
  # Get minibatches of training data and perform model training
  minibatch_size = 25
  num_minibatches_to_train = 1024
  num_sweeps_to_train_with = 2#10
  num_minibatches_to_train = (num_samples_per_sweep * num_sweeps_to_train_with) / minibatch_size  


  # progress_printer = ProgressPrinter(0)
  progress_printer = ProgressPrinter(tag='Training',num_epochs=num_sweeps_to_train_with)

  trainer = Trainer(z, (ce, pe), [sgd(z.parameters, lr=lr_per_minibatch)], [progress_printer])
  #trainer = Trainer(z, (ce, pe), [sgd(z.parameters, lr=lr_per_minibatch)])




  train_file = "Train2-noLiner_cntk_text.txt"  
  # Create the reader to training data set
  reader_train = create_reader(train_file, True, input_dim, num_output_classes)
  # Map the data streams to the input and labels.
  input_map = {
    label : reader_train.streams.labels,
    features : reader_train.streams.features
  } 
  print(reader_train.streams.keys())

  aggregate_loss = 0.0
  #for i in range(num_minibatches_to_train):
  for i in range(0, int(num_minibatches_to_train)):
    #train_features, labels = generate_random_data(minibatch_size, inputs, outputs)
    # Specify the mapping of input variables in the model to actual minibatch data to be trained with
    #trainer.train_minibatch({features : train_features, label : labels})

    # Read a mini batch from the training data file
    data = reader_train.next_minibatch(minibatch_size, input_map = input_map)
    trainer.train_minibatch(data)

    sample_count = trainer.previous_minibatch_sample_count
    aggregate_loss += trainer.previous_minibatch_loss_average * sample_count
    #
  last_avg_error = aggregate_loss / trainer.total_number_of_samples_seen
  trainer.summarize_training_progress()
  z.save_model("myfirstmod.dnn")
  print(z)
  print(z.parameters)
  print(z.d1)
  print(z.d1.signature)
  print(z.d1.root_function)
  print(z.d1.placeholders)
  print(z.d1.parameters)
  print(z.d1.op_name)
  print(z.d1.type)
  print(z.d1.output)
  print(z.outputs)

  test_features, test_labels = generate_random_data(minibatch_size, inputs, outputs)
  avg_error = trainer.test_minibatch({features : test_features, label : test_labels})
  print(' error rate on an unseen minibatch: {}'.format(avg_error))
  return last_avg_error, avg_error

np.random.seed(98052)
ffnet()



print("-------------分割-----------------")
inputs = 2
outputs = 2
minibatch_size = 5
features = input((inputs), np.float32)
label = input((outputs), np.float32)
test_features, test_labels = generate_random_data(minibatch_size, inputs, outputs)  
print('fea={}'.format(test_features))

z = load_model("myfirstmod.dnn")
ce = cross_entropy_with_softmax(z, label)
pe = classification_error(z, label)

lr_per_minibatch = learning_rate_schedule(0.125, UnitType.minibatch)
progress_printer = ProgressPrinter(0)
trainer = Trainer(z, (ce, pe), [sgd(z.parameters, lr=lr_per_minibatch)], [progress_printer])
avg_error = trainer.test_minibatch({z.arguments[0] : test_features, label : test_labels})
print(' error rate on an unseen minibatch: {}'.format(avg_error)) 



result1 = z.eval({z.arguments[0] : test_features}) 
#print("r={} ".format(result1)) 


out = softmax(z)
result = out.eval({z.arguments[0] : test_features}) 
print(result)


print("Label  :", [np.argmax(label) for label in test_labels])
print("Predicted  :", [np.argmax(label) for label in result])
#print("Predicted:", [np.argmax(result[i,:,:]) for i in range(result.shape[0])])


type1_x=[]
type1_y=[]

type2_x=[]
type2_y=[]

for i in range(len(test_labels)):
#for i in range(6):  
  if np.argmax(test_labels[i]) == 0:  
    type1_x.append( test_features[i][0] )  
    type1_y.append( test_features[i][1] ) 

  if np.argmax(test_labels[i]) == 1:  
    type2_x.append( test_features[i][0] )    
    type2_y.append( test_features[i][1] ) 


type1 = plt.scatter(type1_x, type1_y,s=40, c='red',marker='+' )  
type2 = plt.scatter(type2_x, type2_y, s=40, c='green',marker='+') 



nb_of_xs = 100
xs1 = np.linspace(2, 8, num=nb_of_xs)
xs2 = np.linspace(2, 8, num=nb_of_xs)
xx, yy = np.meshgrid(xs1, xs2) # create the grid

featureLine = np.vstack((np.array(xx).reshape(1,nb_of_xs*nb_of_xs),np.array(yy).reshape(1,yy.size)))
print(featureLine.T)
r = out.eval({z.arguments[0] : featureLine.T})

print(r)
# Initialize and fill the classification plane
classification_plane = np.zeros((nb_of_xs, nb_of_xs))


for i in range(nb_of_xs):
  for j in range(nb_of_xs):
    #classification_plane[i,j] = nn_predict(xx[i,j], yy[i,j])
    #r = out.eval({z.arguments[0] : [xx[i,j], yy[i,j]]})
    classification_plane[i,j] = np.argmax(r[i*nb_of_xs+j] )

print(classification_plane)
# Create a color map to show the classification colors of each grid point
cmap = ListedColormap([
    colorConverter.to_rgba('r', alpha=0.30),
    colorConverter.to_rgba('b', alpha=0.30)])
# Plot the classification plane with decision boundary and input samples
plt.contourf(xx, yy, classification_plane, cmap=cmap)


plt.xlabel('x1')  
plt.ylabel('x2')  
#axes.legend((type1, type2,type3), ('0', '1','2'),loc=1)  
plt.show()

代码内容:

1先生成模型。并打印出模型里面的参数

2调用模型,测试下模型错误率

3调用模型,输出结果

4将数据可视化

输出:dict_keys([‘features', ‘labels'])

Finished Epoch[1 of 2]: [Training] loss = 0.485836 * 12000, metric = 20.36% * 12000 0.377s (31830.2 samples/s);

Composite(Dense): Input(‘Input456', [#], [2]) -> Output(‘Block577_Output_0', [#], [2])

(Parameter(‘W', [], [50 x 2]), Parameter(‘b', [], [2]), Parameter(‘W', [], [2 x 50]), Parameter(‘b', [], [50]))

Dense: Input(‘Input456', [#], [2]) -> Output(‘d1', [#], [50])

(Input(‘Input456', [#], [2]),)

Dense: Input(‘Input456', [#], [2]) -> Output(‘d1', [#], [50])

()

(Parameter(‘W', [], [2 x 50]), Parameter(‘b', [], [50]))

Dense

Tensor[50]

Output(‘d1', [#], [50])

(Output(‘Block577_Output_0', [#], [2]),)

error rate on an unseen minibatch: 0.6

————-分割—————?

fea=[[ 2.74521399 3.6318233 ]

[ 3.45750308 3.8683207 ]

[ 3.49858737 4.31363964]

[ 9.01324368 1.75216711]

[ 9.15447521 7.21175623]]

average since average since examples

loss last metric last

error rate on an unseen minibatch: 0.2

[[ 0.57505184 0.42494816]

[ 0.70583773 0.29416227]

[ 0.67773896 0.32226101]

[ 0.04568771 0.95431226]

[ 0.95059013 0.04940984]]

Label : [0, 0, 0, 1, 1]

Predicted : [0, 0, 0, 1, 0]

[[ 2. 2. ]

[ 2.06060606 2. ]

[ 2.12121212 2. ]

…,

[ 7.87878788 8. ]

[ 7.93939394 8. ]

[ 8. 8. ]]

用python生成与调用cntk模型代码演示方法

Train2-noLiner_cntk_text 部分数据:

|features 1.480778 -1.265981 |labels 1 0

|features -0.592276 3.097171 |labels 0 1

|features 4.654565 1.054850 |labels 0 1

|features 6.124534 0.265861 |labels 0 1

|features 6.529863 1.347884 |labels 0 1

|features 2.330881 4.995633 |labels 0 1

|features 1.690045 0.171233 |labels 1 0

|features 2.101682 3.911253 |labels 0 1

|features 1.907487 0.201574 |labels 1 0

|features 5.141490 1.246433 |labels 0 1

|features 0.696826 0.481824 |labels 1 0

|features 3.305343 4.792150 |labels 1 0

|features 3.496849 -0.408635 |labels 1 0

|features 3.911750 0.205660 |labels 0 1

|features 5.154604 0.453434 |labels 0 1

|features 4.084166 2.718320 |labels 0 1

|features 5.544332 1.617196 |labels 0 1

|features -0.050979 0.466522 |labels 1 0

|features 5.168221 4.647089 |labels 1 0

|features 3.051973 0.864701 |labels 1 0

|features 5.989367 4.118536 |labels 1 0

|features 1.251041 -0.505563 |labels 1 0

|features 3.528092 0.319297 |labels 0 1

|features 6.907406 6.122889 |labels 1 0

|features 2.168320 0.546091 |labels 1 0

以上这篇用python生成与调用cntk模型代码演示方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pygame学习笔记(4):声音控制
Apr 15 Python
Python3遍历目录树实现方法
May 22 Python
Python生成一个迭代器的实操方法
Jun 18 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
结合OpenCV与TensorFlow进行人脸识别的实现
Oct 10 Python
python中的RSA加密与解密实例解析
Nov 18 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
Python requests模块session代码实例
Apr 14 Python
Python实现寻找回文数字过程解析
Jun 09 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 Python
python list转置和前后反转的例子
Aug 26 #Python
python3 map函数和filter函数详解
Aug 26 #Python
python爬虫 2019中国好声音评论爬取过程解析
Aug 26 #Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 #Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 #Python
python 中xpath爬虫实例详解
Aug 26 #Python
Python使用itchat模块实现群聊转发,自动回复功能示例
Aug 26 #Python
You might like
PHP中“简单工厂模式”实例代码讲解
2012/09/04 PHP
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
element-ui封装一个Table模板组件的示例
2021/01/04 Javascript
Python中的高级数据结构详解
2015/03/27 Python
python十进制转二进制的详解
2020/02/07 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
广告学专业推荐信范文
2013/11/23 职场文书
教师节学生演讲稿
2014/09/03 职场文书
工程承包协议书范本
2014/09/29 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL