用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 相关文章推荐
写了个监控nginx进程的Python脚本
May 10 Python
flask + pymysql操作Mysql数据库的实例
Nov 13 Python
python 连接各类主流数据库的实例代码
Jan 30 Python
对pandas进行数据预处理的实例讲解
Apr 20 Python
Python中遍历列表的方法总结
Jun 27 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
使用python创建生成动态链接库dll的方法
May 09 Python
python如何快速生成时间戳
Jul 21 Python
Python3爬虫发送请求的知识点实例
Jul 30 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
基于python实现监听Rabbitmq系统日志代码示例
Nov 28 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
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
JS实现复制功能
2017/03/01 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
JS使用for in有序获取对象数据
2020/05/19 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
python实现BackPropagation算法
2017/12/14 Python
python删除字符串中指定字符的方法
2018/08/13 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
Python数据可视化:泊松分布详解
2019/12/07 Python
Django 再谈一谈json序列化
2020/03/16 Python
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
医学检验专业大学生求职信
2013/11/18 职场文书
总经理助理的职责
2014/03/14 职场文书
团支部推优材料
2014/05/21 职场文书
团队队名口号大全
2014/06/06 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
详解Vue3使用axios的配置教程
2022/04/29 Vue.js