Chinaunix

标题: 现在流行的深度学习的框架里面,哪个比较靠谱? [打印本页]

作者: fender0107401    时间: 2017-07-15 09:50
标题: 现在流行的深度学习的框架里面,哪个比较靠谱?
问问。

不打算写Python,打算直接C++。


作者: zhujiang73    时间: 2017-07-15 17:28
fender0107401 发表于 2017-07-15 09:50
问问。

不打算写Python,打算直接C++。



首先强烈建议使用 python,放弃对大括号的执念吧。


如果一定要搞 C++ 可以从底层搞,建议看看 https://github.com/ROCmSoftwarePlatform/MIOpen



作者: fender0107401    时间: 2017-07-15 19:18
zhujiang73 发表于 2017-07-15 17:28
首先强烈建议使用 python,放弃对大括号的执念吧。

坚决不用Python。

抵制Python,从我做起。


作者: zhujiang73    时间: 2017-07-15 19:50
fender0107401 发表于 2017-07-15 19:18
坚决不用Python。

抵制Python,从我做起。

这是多大的怨念呀。

为什么呀????  


作者: cokeboL    时间: 2017-07-16 10:19
回复 4# zhujiang73

F版被py(炮友)语言伤害过
作者: fender0107401    时间: 2017-07-16 17:22
zhujiang73 发表于 2017-07-15 19:50
这是多大的怨念呀。

为什么呀????

哈哈,反正就是不屑Python,受不了没有逻辑块的结尾标识。

喜欢C/C++系语言的{}或者是matlab的end,但是Python啥都没有,全靠缩进,实在别扭,感觉多层嵌套的时候,逻辑上不是很清楚。


作者: fender0107401    时间: 2017-07-16 17:23
cokeboL 发表于 2017-07-16 10:19
回复 4# zhujiang73

F版被py(炮友)语言伤害过

你这人污。。。
作者: zhujiang73    时间: 2017-07-16 18:07
回复 6# fender0107401

            如果项目需要,一个星期就习惯了。
一般也就这样:
  1. #---------------------------------------------------
  2. # File armature.py
  3. #---------------------------------------------------
  4. import bpy, math
  5. from mathutils import Vector, Matrix

  6. def createRig(name, origin, boneTable):
  7.     # Create armature and object
  8.     bpy.ops.object.add(
  9.         type='ARMATURE',
  10.         enter_editmode=True,
  11.         location=origin)
  12.     ob = bpy.context.object
  13.     ob.show_x_ray = True
  14.     ob.name = name
  15.     amt = ob.data
  16.     amt.name = name+'Amt'
  17.     amt.show_axes = True

  18.     # Create bones
  19.     bpy.ops.object.mode_set(mode='EDIT')
  20.     for (bname, pname, vector) in boneTable:        
  21.         bone = amt.edit_bones.new(bname)
  22.         if pname:
  23.             parent = amt.edit_bones[pname]
  24.             bone.parent = parent
  25.             bone.head = parent.tail
  26.             bone.use_connect = False
  27.             (trans, rot, scale) = parent.matrix.decompose()
  28.         else:
  29.             bone.head = (0,0,0)
  30.             rot = Matrix.Translation((0,0,0))        # identity matrix
  31.         bone.tail = rot * Vector(vector) + bone.head
  32.     bpy.ops.object.mode_set(mode='OBJECT')
  33.     return ob

  34. def poseRig(ob, poseTable):
  35.     bpy.context.scene.objects.active = ob
  36.     bpy.ops.object.mode_set(mode='POSE')

  37.     for (bname, axis, angle) in poseTable:
  38.         pbone = ob.pose.bones[bname]
  39.         # Set rotation mode to Euler XYZ, easier to understand
  40.         # than default quaternions
  41.         pbone.rotation_mode = 'XYZ'
  42.         # Documentation bug: Euler.rotate(angle,axis):
  43.         # axis in ['x','y','z'] and not ['X','Y','Z']
  44.         pbone.rotation_euler.rotate_axis(axis, math.radians(angle))
  45.     bpy.ops.object.mode_set(mode='OBJECT')

  46. def run(origo):
  47.     origin = Vector(origo)
  48.     # Table of bones in the form (bone, parent, vector)
  49.     # The vector is given in local coordinates
  50.     boneTable1 = [
  51.         ('Base', None, (1,0,0)),
  52.         ('Mid', 'Base', (1,0,0)),
  53.         ('Tip', 'Mid', (0,0,1))
  54.     ]
  55.     bent = createRig('Bent', origin, boneTable1)

  56.     # The second rig is a straight line, i.e. bones run along local Y axis
  57.     boneTable2 = [
  58.         ('Base', None, (1,0,0)),
  59.         ('Mid', 'Base', (0,0.5,0)),
  60.         ('Mid2', 'Mid', (0,0.5,0)),
  61.         ('Tip', 'Mid2', (0,1,0))
  62.     ]
  63.     straight = createRig('Straight', origin+Vector((0,2,0)), boneTable2)

  64.     # Pose second rig
  65.     poseTable2 = [
  66.         ('Base', 'X', 90),
  67.         ('Mid2', 'Z', 45),
  68.         ('Tip', 'Y', -45)
  69.     ]
  70.     poseRig(straight, poseTable2)

  71.     # Pose first rig
  72.     poseTable1 = [
  73.         ('Tip', 'Y', 45),
  74.         ('Mid', 'Y', 45),
  75.         ('Base', 'Y', 45)
  76.     ]
  77.     poseRig(bent, poseTable1)

  78. if __name__ == "__main__":
  79.     run((0,5,0))
复制代码



作者: zhujiang73    时间: 2017-07-16 18:07
本帖最后由 zhujiang73 于 2017-07-16 18:08 编辑

论坛出错了???
作者: fender0107401    时间: 2017-07-16 20:48
zhujiang73 发表于 2017-07-16 18:07
回复 6# fender0107401

            如果项目需要,一个星期就习惯了。
  1.     #---------------------------------------------------
  2.     # File armature.py
  3.     #---------------------------------------------------
  4.     import bpy, math
  5.     from mathutils import Vector, Matrix

  6.     def createRig(name, origin, boneTable):
  7.         # Create armature and object
  8.         bpy.ops.object.add(
  9.             type='ARMATURE',
  10.             enter_editmode=True,
  11.             location=origin)
  12.         ob = bpy.context.object
  13.         ob.show_x_ray = True
  14.         ob.name = name
  15.         amt = ob.data
  16.         amt.name = name+'Amt'
  17.         amt.show_axes = True

  18.         # Create bones
  19.         bpy.ops.object.mode_set(mode='EDIT')
  20.         for (bname, pname, vector) in boneTable:        
  21.             bone = amt.edit_bones.new(bname)
  22.             if pname:
  23.                 parent = amt.edit_bones[pname]
  24.                 bone.parent = parent
  25.                 bone.head = parent.tail
  26.                 bone.use_connect = False
  27.                 (trans, rot, scale) = parent.matrix.decompose()
  28.             else:
  29.                 bone.head = (0,0,0)
  30.                 rot = Matrix.Translation((0,0,0))        # identity matrix
  31.                 bone.tail = rot * Vector(vector) + bone.head
  32.         bpy.ops.object.mode_set(mode='OBJECT')
  33.         return ob

  34.     def poseRig(ob, poseTable):
  35.         bpy.context.scene.objects.active = ob
  36.         bpy.ops.object.mode_set(mode='POSE')

  37.         for (bname, axis, angle) in poseTable:
  38.             pbone = ob.pose.bones[bname]
  39.             # Set rotation mode to Euler XYZ, easier to understand
  40.             # than default quaternions
  41.             pbone.rotation_mode = 'XYZ'
  42.             # Documentation bug: Euler.rotate(angle,axis):
  43.             # axis in ['x','y','z'] and not ['X','Y','Z']
  44.             pbone.rotation_euler.rotate_axis(axis, math.radians(angle))
  45.             bpy.ops.object.mode_set(mode='OBJECT')

  46.     def run(origo):
  47.         origin = Vector(origo)
  48.         # Table of bones in the form (bone, parent, vector)
  49.         # The vector is given in local coordinates
  50.         boneTable1 = [
  51.             ('Base', None, (1,0,0)),
  52.             ('Mid', 'Base', (1,0,0)),
  53.             ('Tip', 'Mid', (0,0,1))
  54.         ]
  55.         bent = createRig('Bent', origin, boneTable1)

  56.         # The second rig is a straight line, i.e. bones run along local Y axis
  57.         boneTable2 = [
  58.             ('Base', None, (1,0,0)),
  59.             ('Mid', 'Base', (0,0.5,0)),
  60.             ('Mid2', 'Mid', (0,0.5,0)),
  61.             ('Tip', 'Mid2', (0,1,0))
  62.         ]
  63.         straight = createRig('Straight', origin+Vector((0,2,0)), boneTable2)

  64.         # Pose second rig
  65.         poseTable2 = [
  66.             ('Base', 'X', 90),
  67.             ('Mid2', 'Z', 45),
  68.             ('Tip', 'Y', -45)
  69.         ]
  70.         poseRig(straight, poseTable2)

  71.         # Pose first rig
  72.         poseTable1 = [
  73.             ('Tip', 'Y', 45),
  74.             ('Mid', 'Y', 45),
  75.             ('Base', 'Y', 45)
  76.         ]
  77.         poseRig(bent, poseTable1)

  78.     if __name__ == "__main__":
  79.         run((0,5,0))
复制代码

哈哈哈哈哈哈哈。


作者: fender0107401    时间: 2017-07-16 20:49
我就修改了一点点。
作者: zhujiang73    时间: 2017-07-17 23:29
回复 11# fender0107401 一个顾客走进一家牛排店,要一块牛排:

C++:服务员牵来一头牛,给了顾客主厨刀、削皮刀、剔骨刀、片刀、砍刀、美工刀……堆满在桌上,笑道,请享用!顾客一脸懵逼,但看到邻桌的老大爷用挥舞双截棍的姿势使用美工刀切出一块完美的牛排,于是也模仿起来。后来他住院了。

Python:服务员端上牛排和餐具,并附上一把游标卡尺,叮嘱顾客要严格按照某个尺寸吃,否则会食物中毒甚至死亡。  

一个顾客走进一家牛排店,要一块牛排:

C:服务员牵来一头牛,给了顾客一把大刀,笑道,请享用!

C++:服务员牵来一头牛,给了顾客主厨刀、削皮刀、剔骨刀、片刀、砍刀、美工刀……堆满在桌上,笑道,请享用!顾客一脸懵逼,但看到邻桌的老大爷用挥舞双截棍的姿势使用美工刀切出一块完美的牛排,于是也模仿起来。后来他住院了。

Java:服务员端上牛排和餐具,顾客正要享用,服务员开始介绍吃牛排的步骤,事无巨细,喋喋不休,说了三个小时顾客才能开始切牛排。

还是 Java:服务员端上牛排和餐具,笑道,请享用!顾客吃了起来。吃得正开心,突然服务员大吼一声,停!一队清洁工走到顾客身边开始打扫卫生,吸地擦桌,好不热闹,过了好一会儿,服务员才说,请继续享用!

C#:这间餐馆和之前某家看起来一模一样,但是到处都贴着大大小小的横幅:我们这家比隔壁那家好。

Python:服务员端上牛排和餐具,并附上一把游标卡尺,叮嘱顾客要严格按照某个尺寸吃,否则会食物中毒甚至死亡。

Ruby:服务员听说顾客要牛排,带着顾客出了门。顾客不明所以,被领到一条铁轨上,服务员说,请您坐在铁轨上,才能吃我们家的牛排,谢谢。

Swift:服务员端上牛排和餐具,笑道,请享用!顾客吃得正开心,服务员又端来一块牛排,笑道,我们有新的牛排,请您务必吃下,但食用前请将你您刚吃下的牛排吐干净。

JavaScript:服务员端上一块猪排,笑道,您闭上眼睛吃,想着它是牛排,它吃起来就跟牛排一模一样!

Objective-C:顾客点菜时发现每道菜的名字都有一两页长,而且服务员非要听全名否则不给点,最后顾客点了一个璃莹殇·安洁莉娜·樱雪羽晗灵·(知乎日报注:此处编辑删掉了一万多字)·兰尼·丽塔吉娜·洛丽丝牛排。

PHP:服务员端上牛排和餐具,大声说道,我们家的牛排是最好吃的!并坚持顾客跟着说一遍才能开始进餐




作者: lxyscls    时间: 2017-07-18 05:31
python比c++的开发效率高多了,保证每个函数的大小,缩进也基本上看不走眼
作者: cokeboL    时间: 2017-07-18 08:56
我的一些工具用 py 写的
作者: windoze    时间: 2017-07-18 17:05
不就是TensorFlow还有MXNet这些喽,话说这些DNN框架其实就是一坨一坨的矩阵乘,你要有心自己写一个也没多难。
作者: fender0107401    时间: 2017-07-18 22:38
windoze 发表于 2017-07-18 17:05
不就是TensorFlow还有MXNet这些喽,话说这些DNN框架其实就是一坨一坨的矩阵乘,你要有心自己写一个也没多难 ...

多谢阿猫,之前只知道TensorFlow,多谢推荐MXNet。






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2