精华内容
下载资源
问答
  • 行业类别代码表(2012年修订版)》Excel表格文档。
  • 行业类别代码 制造企业填表经常用到 有细分的 分的很详细 而且有说明
  • 花一下午时间从智联网站扒下来的行业分类弹出多选代码,保证最新,和现在(2014年) 网站一模一样。 不一样欢迎喷我。
  • 教育行业国标代码.rar

    2019-09-02 09:16:33
    教育行业国标代码HYZK代码集子项、XB代码集子项行政类别代码集子项等等
  • 可以开发用于工商资讯类别的程序,可以把这些数据灌入数据库方便查询,对于创业公司的设立和战略定位有必要;
  • 生产性服务业行业分类及代码 类别 行业代码2011 主要行业 大类 中类 小类 一农业服务 5 ? ? 农林牧渔服务业 ? 51 ? 农业服务业 ? ? 511 农业机械服务 ? ? 512 灌溉服务 ? ? 513 农产品初加工服务 ? ? 519 其他农业...
  • 清洗后的2017年国标行业分类,mysql版本的sql文件,可直接导入 字段有:行业类别代码,行业类别名称,隶属父级编码,行业描述4个字段,符合大多数业务逻辑
  • 国民经济行业分类(GB/T 4754—2017)已于2017年10月1日实施,新版行业分类共有20...其中,为体现新产业、新业态、新商业模式,主要增加以下行业类别:“种子种苗培育活动、畜牧良种繁殖活动、畜禽粪污处理活动……”。
  • 这段时间,跟不少朋友讨论过有关“可视搭建”、“低代码”、...当前所面向行业的人员状况分别是怎样的,软件系统有哪些类别?为了提升效率,策略可能有哪些,分别是从什么角度解决,有可能带来什么新问题?未来的...

    这段时间,跟不少朋友讨论过有关“可视搭建”、“低代码”、“零代码”相关的一些话题,也当面解答过一些问题,感觉有必要把一些观点写出来。

    搭建系统的实质

    一个基于搭建的想要解决提效问题的平台,需要至少能明确回答几个问题:

    • 软件系统的开发效率消耗在哪些环节,原因分别是什么?
    • 当前所面向行业的人员状况分别是怎样的,软件系统有哪些类别?
    • 为了提升效率,策略可能有哪些,分别是从什么角度解决,有可能带来什么新问题?
    • 未来的产品规划里,你期望的平台使用角色是哪些,分别如何参与的?
    • 出现未知领域的新业务产品,平台可以如何去支撑?
    • 整个这个体系,更长远的发展思路是什么?

    业务的复杂度只会转移,是不会消失的。用代码表达,或者搭建系统表达,本质上只是改变了其组织形态,得到的管控方式有所差别,其业务实质是一样的。

    所以,我们想要通过搭建系统来表达一个业务,其底层首先就要有对等于主流开发框架的架构,确保拥有完整表达业务需求的能力,然后才去做产品形态上的权衡。

    如果我们面向某个行业,则不免需要与几种角色打交道:

    • 业务专家
    • 一般业务人员
    • 有一定IT知识的人员
    • 有专业开发技能的人员

    所以,产品形态的设计,也是要考虑到他们的业务倾向和知识范畴。而其他的一些角色,尤其是设计师和前端开发人员,则应当尽可能在平台中消除他们的参与,把这两种角色提供的能力进行模块化,预先设计基于某个业务领域的交互集,然后由单一职责的研发人员来统一使用两种基建:

    • 存储
    • 交互

    并且使用逻辑与规则把这些东西编排起来。

    需要认识到,因为业务复杂度不灭,实际上所有的业务复杂度都聚集在单一职责的研发人员身上了,所以如果从零开始建立一个业务系统,唯一感受不到提效的会是这个角色,这是一种必然。对他们的提效,需要在业务差异化定制的时候,由对业务复用的方法论去体现。

    业务软件的定制化

    在业务软件领域,通常会面临定制化问题,除了少数功能极其单一的软件,一般都会存在差异化需求。绝大部分业务软件会被这个问题困扰。

    基于代码分支实现的差异化需求管理,是一种比较艰难的方式,因为单一的业务功能,往往其变更贯穿前后端,涉及代码中的多个位置,而且这些代码中的实现,往往与其他功能也有关。所以本质问题就是,功能点不是独立隔离的,导致要从某家客户的版本迁移给另外一家客户,是一件比较难操作的事情。

    目前,大部分主流行业软件提供商都会提供各种维度的定制能力,但是它们一般有一个共性:围绕自身的业务领域。这种可定制能力,可以认为就是:低代码。

    低代码的含义在两个方面:

    • 可以通过代码来扩展业务能力
    • 比直接写代码的那种方式代码要少一些

    结合我们在上一节提到的,一种可搭建平台的底层实质上是一种框架:

    • 写代码扩展业务能力,是基于框架的扩展点,并且这些扩展可以被管理起来
    • 代码少一些,是因为框架额外提供了一些能力

    纵观整个应用开发体系,我们可以发现,最适合低代码发挥的前提是:

    • 针对一个特定业务领域,已经存在完整的标准化业务实现了
    • 交互集也已经齐备

    然后,可以修改规则,添加校验,编排现有的动作,调整视图的结构和布局,并补齐剩余的其他细节修改。

    所以,从这个角度,我们可以认识到:

    低代码的主要适用场景是解决相同业务领域下的差异化问题的。尽管可能存在这样的能力,但是我们并不期望某种业务从零开始基于低代码搭建整个业务,而是期望定制化团队使用这样的方式去进行小规模定制,并且把这种定制的差异化,隔离在其自身的作用域中,不对其他租户或者客户产生影响。

    业务软件的个性化

    定制好了以后,出厂交付了的业务软件需要很强的个性化能力吗?

    这个问题很有意思。传统观念,这类软件用来办公的,个性化的价值很小,但是我个人觉得这个问题是可以探讨的。

    疫情期间,大家都会去戴口罩,口罩应该长什么样子呢?就是通常大家所能想象的形态,最多是形状和颜色有差异。人们对业务系统的认知通常也是差不多,就是大面积的表格表单,风格稍有差别而已。

    但是有一次,我看到一位之前的女同事,她发了一张非常好看的口罩照片,这照片里的口罩是蕾丝的、绣花的,配合她靓丽的面容,简直如虎添翼(划掉,重新想个词!)。

    很多年前,我们上一代人的办公桌是什么样子呢?木制,偏棕色,有的会盖一块玻璃,上面放着电话机,纸笔,有的比较雅致的,会放一盆水仙花。

    那么,现在,大家的办公桌又如何呢?已经有很多人个性化装扮了自己的桌面了,比如很多人桌面放着玩偶(据说叫做手办?这个我不太懂,用错词了大家体谅下。。。),有的放着乐高积木搭建的某种建筑,有的放着其他形式的装饰。

    所以说,会不会是我们不需要定制业务软件,而是因为之前的可定制能力限制了大家呢?

    通常的业务系统中,都会给用户留一定的个性化空间,最典型的就是工作台。通过这个去组织自己的工作习惯,但大部分系统实际上只是把它当作功能入口来使用,没有真正地做好这块,因为把每种业务模块都提供可集成单元的代价较大。

    如果我们抛开这种固有的看法,把视野拓宽到整个应用中的一切业务视图,如果都尽可能地赋予用户自由组合与调整的能力,对使用效率的提升一定会很巨大。

    这样,个性化不再局限于风格与主题的定制,而是真正体现到了业务表现形态的差异化和高效化。

    所以,从这个角度,我们可以认识到:

    无代码的主要使用场景是在业务齐备的情况下,不更改业务语义,解决个性化需求。每个用户,可以定制自己的工作台,调整业务界面的布局形态,设定某功能的搜索偏好,调整表格和表单种字段的填写和展示状况,等等。

    小结

    综上,我们可以发现,不管哪种形态,都只是相同底层约束之上,面向不同使用群体的一种产品抽象而已。它们从不矛盾,而是互补的。甚至也可以从另外一个角度看待,提供一种从轻度差异化到重度差异化定制的产品升级路线,使得每个层面的客户都可以得到适合自己层次的需求定制度。

    展开全文
  • 在之前的文章中,我们讨论了企业级低代码开发...典型的企业级应用通常可以分为三个大类,即支撑企业核心业务的应用系统(如生产制造业的MES、交通运输业的TMS)、涵盖企业全流程的大规模综合型系统和基于行业软件定制

    在之前的文章中,我们讨论了企业级低代码开发平台对系统架构提出的技术要求。今天,我们在架构的基础上,关注开放性为企业级应用开发带来的重要价值,详细了解低代码开发平台如何通过与各种软硬件与互联网服务深度集成,打通数据孤岛,协同增效推进企业数智化转型升级。
    协同增效的企业数智化解决方案

    什么是企业级应用开发平台?

    企业级应用是企业软件应用中的一个类别,被称为软件开发领域的“明珠”。典型的企业级应用通常可以分为三个大类,即支撑企业核心业务的应用系统(如生产制造业的MES、交通运输业的TMS)、涵盖企业全流程的大规模综合型系统和基于行业软件定制开发的个性化模块。这些企业级应用支撑着企业的核心业务发展,为推进企业数字化打下坚实的基础。
    互联网应用 vs 企业级应用
    这些特性决定了能够开发企业级应用的工具,必然能够满足互联网应用的开发,反之则不尽然。这就意味着选择一款企业级应用低代码开发平台,除了生产力外,还需关注工具本身的技术架构、开放程度及安全可控性等关键指标。

    本文将专注于开放性,以活字格企业级低代码开发平台为例,从多源数据整合到各层编程接口,全面介绍具备能够支撑企业级应用开发的低代码开发工具,及这类工具的开放性设计。
    活字格企业级低代码开发平台

    剑指“数据孤岛”,支持多源数据整合

    作为系统集成的重要组成部分和基础能力,多源数据整合被更多开发者和企业 IT 决策人员视为低代码开发平台产品的必备功能。截止目前,少数先进的低代码开发平台厂商已经开放了数据访问能力,支持通过外联数据库的方式对接其他业务系统。然而,充分考虑到业务系统的多样性,仅做到数据库层面的开放是远远不够的。为了支撑多源数据整合,活字格针对不同的应用场景,提供了三种方案。

    1. 在提供内置数据库的基础上,活字格支持外联 MySQL、Microsoft SQL Server、Oracle 等多种主流数据库。开发者可以像使用内置数据库一样,使用外联数据库进行系统构建,不论是与第三方系统的数据库做数据整合,还是直接使用专业级数据库构建高性能的企业级应用,都不存在技术障碍。
    2. 活字格提供了 JSON 数据源解决方案,由 HTTP 请求调用和 JSON数据解析与处理功能构成。借助该方案,开发者无需编码即可调用行业软件、AI 服务、IoT(物联网)服务等云服务提供的 Web服务接口,发送请求,将数据展示给最终用户进行后续操作。
    3. 针对仅提供 Excel/CSV 文件导出的第三方软件,活字格内置了开箱即用的 Excel 文件导入功能,可以解析 Excel 文件和CSV文件,按照设定的导入策略,将其中的数据抽取到数据表或页面上。
      活字格的多源数据整合解决方案

    无限扩展,从前端到后端的编程接口

    企业客户的需求和软件技术本身都处在高速发展中,如何避免开发平台成为系统开发的限制因素,成为了企业级低代码开发平台的必须面对的难题。基于专业控件领域 40 年的技术积累,活字格的解决方案是为开发者提供全面的编程接口。
    活字格的系统分层与编程接口
    活字格的编程接口和帮助文档,能帮助开发者通过编码的方式,精确修改各层的处理逻辑,免除专业开发者的后顾之忧,为系统集成提供坚实的技术基础。编程接口支持的技术、语言以及典型使用场景如下所示。
    各层编程接口的典型应用场景

    合规部署,支持私有化部署和云部署

    为了充分满足企业级应用开发过程中,不同应用场景、合规性要求以及 IT 技术背景对部署方式的要求,活字格企业级低代码开发平台的部署方式非常灵活,全面支持私有化和云部署。对于用户规模庞大,并发量高企的核心业务应用,活字格还能在部署层面支持负载均衡,让系统处理能力倍增。

    从实践上看,活字格服务器的部署方式主要有以下三种模式,不论选择哪种模式,开发者和系统管理员都具备对应用和数据的完整控制权。

    • 云主机:云主机模式是活字格推荐的部署方式,特别适合预算有限或者应用场景以互联网为主(如移动办公等)的企业级应用。开发者在阿里云等云服务商租赁云主机(如ECS),然后将服务器部署在该云主机上,为最终用户提供服务,实现“私有云”的效果。
    • 内网穿透:如需与内网的其他系统的数据频繁交互,或者应用场景以内网为主、互联网为辅,开发者可以将服务器部署在内网中,并通过NAT、反向代理等网络技术将其映射到外网。这样,最终用户也能通过互联网访问该服务器。
    • 纯内网:对于安全、可控性要求高的金融或军工企业,开发者可以将服务器部署在企业内部的局域网中,最终用户通过局域网访问,完全断开与互联网的连接。

    活字格提供灵活的部署方式
    除了灵活的部署方式,活字格服务器基于 .NET Core(一款开源的应用程序开发框架)技术构建,支持跨平台。开发者可以根据自身的技术背景和企业的IT资源,选择 Windows 或 Linux 版本。经过严格测试,活字格(V6.0 Update 1)所支持的操作系统列表如下。

    • Windows 7 / 8 / 8.1 Update / 10
    • Windows Server 2008 R2 SP1/2012/2012 R2 Update/2016/2019
    • CentOS 7
    • Ubuntu 1604 / 1804
    • RedHat 7
    • 中标麒麟 V7

    系统集成能力更受重视是行业发展趋势

    在中国软件行业协会发布的《2020中国低代码开发平台十大发展趋势》报告中,“打通数据孤岛,低代码与业务系统的集成能力更受重视”被判定为低代码开发平台发展的必然趋势,而平台的开放性正是支撑其系统集成能力的基础。所以,业界认为高度开放是低代码开发技术能够支撑企业级应用开发的必要条件之一。作为国内低代码技术趋势的引领者,活字格凝聚了葡萄城专业开发控件领域40年的技术积累,支持多源数据整合,提供全方位编程接口,能帮助开发者快速交付与业务系统、硬件设备、软件服务深度集成的企业级应用。

    如需了解活字格企业级低代码开发平台及其应用案例,欢迎在百度中搜索“活字格”,访问官网,查看更多内容,免费下载试用。

    展开全文
  • 搜索引擎代码

    2011-09-19 08:58:09
    E桶金行业搜索引擎系统(包含多线程客户端蜘蛛系统) V1.6 版发布! E桶金行业搜索引擎 特别适用于超大、中型信息门户、行业门户、电子商务等网站使用。 它是一款真正意义上的搜索引擎:具有自己的蜘蛛、分词、索引...
  • 摘要在软件工程中软件重构具有重要意义它可以提高软件的可维护性可扩展性可重用性进而改善软件质量在软件重构中代码异味检测是其中的重要组成部分目前代码异味检测的相关研究划分为几个类别在对基于搜索的代码异味...
  • 关键字: 1.2million 张图片,1000个类别,有60百万个参数,65000个神经元,5个卷积层,三个全连接层,双GPU进行计算. 这一部分主要大概说明了一下行业发展,以及文章的概况。 主要说明了作者把数据集统一成了256...

    AlenNet 理论及代码实现


    理论部分


    在这里插入图片描述
    关键字: 1.2million 张图片,1000个类别,有60百万个参数,65000个神经元,5个卷积层,三个全连接层,双GPU进行计算.

    在这里插入图片描述

    在这里插入图片描述
    这一部分主要大概说明了一下行业发展,以及文章的概况。


    主要说明了作者把数据集统一成了256x256的RGB 图像

    在这里插入图片描述
    在这里插入图片描述
    3.1主要讲到将ReLU 激活函数运用到网络当中去,以及ReLU激活函数的一些优点。关于ReLU的更多描述可以参考这篇文章
    在这里插入图片描述
    3.2主要讲了双GPU运算。

    在这里插入图片描述
    局部响应归一化
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


    代码实现部分在这里插入图片描述

    代码实现

    • model.py
    import torch.nn as nn
    import torch
    
    
    class AlexNet(nn.Module):#定义一个继承自nn.Module 的子类
        # nn.Module Base class for all neural network modules.
        def __init__(self, num_classes=2, init_weights=False):
            #通过初始化函数定义网络在正向传播过程中需要用到的层结构
            super(AlexNet, self).__init__()
            #与前两不同的是 使用nn.Sequential() 打包代码 将一系类层结构进行打包
            #定义features 结构 专门用来提取图像的特征
            self.features = nn.Sequential(
                #第一次 卷积核大小为11 步长为4  深度为3 卷积核个数为48 (为了提高速度,与原论文相比减少一半
                #padding=2 左右,上下补上两行0
                #通过计算得到的 特征图为一个小数 pytorch 会自动修改padding
                #卷积后得到的不为整数pytorch 将自动修改padding
                # input(2,224,224) output(48, 55, 55]
                nn.Conv2d(3, 48, kernel_size=11, stride=4, padding=2),  # input[3, 224, 224]  output[48, 55, 55]
                #卷积后经过 ReLu 激活 inplace =True  可增加计算量,减少内存占用
                nn.ReLU(inplace=True),
                #卷积核 3 步长2
                nn.MaxPool2d(kernel_size=3, stride=2),                  # output[48, 27, 27]
                nn.Conv2d(48, 128, kernel_size=5, padding=2),           # output[128, 27, 27]
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=3, stride=2),                  # output[128, 13, 13]
                nn.Conv2d(128, 192, kernel_size=3, padding=1),          # output[192, 13, 13]
                nn.ReLU(inplace=True),
                nn.Conv2d(192, 192, kernel_size=3, padding=1),          # output[192, 13, 13]
                nn.ReLU(inplace=True),
                nn.Conv2d(192, 128, kernel_size=3, padding=1),          # output[128, 13, 13]
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=3, stride=2),                  # output[128, 6, 6]
            )
            #定义classifier结构 作全连接层
            self.classifier = nn.Sequential(
                #通过Dropout 方法 使节点按照一定的比例失活 防止过拟合 一般放在全连接与全连接层之间
    
                nn.Dropout(p=0.5),#50%失活神经元 默认为0.5
                nn.Linear(128 * 6 * 6, 2048),#输入为上一层的输出 (输入,输出)
                nn.ReLU(inplace=True),#ReLu 激活
                nn.Dropout(p=0.5),#全连接1 和全连接2 之间 随机失活
                nn.Linear(2048, 2048),
                nn.ReLU(inplace=True),
                nn.Linear(2048, num_classes),#输出为 数据集的类别的个数
            )
            #初始化权重函数
            if init_weights:
                self._initialize_weights()
        #正向传播函数
        def forward(self, x):
            x = self.features(x)
            #得到特征图后进行展平处理
            #从chanal 高度,宽度 展品
            #pytorch 通道排列顺序 banch chanal 高 宽
            #第一维度banch 一般无需处理
            x = torch.flatten(x, start_dim=1)
            x = self.classifier(x)
            return x
        #初始化权重
        #pytorch 会自动采用下列方法初始化,实际使用过程中无需使用下列初始化
        def _initialize_weights(self):
            for m in self.modules():#遍历modules 中的每一个结构
                if isinstance(m, nn.Conv2d): #如果层结构为 nn.Conv2d
                    #对卷积权重w进行初始化
                    nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
                    #如果偏置不为空,使用0 对其初始化
                    if m.bias is not None:
                        nn.init.constant_(m.bias, 0)
                elif isinstance(m, nn.Linear):
                    #如果是全连接层,通过正态分布初始化权重 平均值为 0 方差为0.01
    
                    nn.init.normal_(m.weight, 0, 0.01)
                    nn.init.constant_(m.bias, 0)
    
    • train.py
    import os
    import json
    
    import torch
    import torch.nn as nn
    from torchvision import transforms, datasets, utils
    import matplotlib.pyplot as plt
    import numpy as np
    import torch.optim as optim
    from tqdm import tqdm
    
    from model import AlexNet
    
    
    def main():
        #指定使用设备
        device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
        print("using {} device.".format(device))
        #数据预处理函数
        data_transform = {
            "train": transforms.Compose([transforms.RandomResizedCrop(224),#随机裁剪
                                         transforms.RandomHorizontalFlip(),#随机翻转
                                         transforms.ToTensor(),#转化为tensor
                                         #标准化处理
                                         transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]),
            "val": transforms.Compose([transforms.Resize((224, 224)),  # cannot 224, must (224, 224)
                                       transforms.ToTensor(),
                                       transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])}
        # .. 表示返回上一层目录
        #data_root = os.path.abspath(os.path.join(os.getcwd(), "../.."))  # get data root path
        # data_root 当前项目位置的前一个目录
        data_root = os.path.abspath(os.path.join(os.getcwd(), ".."))
        #image_path = os.path.join(data_root, "data_set", "flower_data")  # flower data set path
    
        #图片的位置
        image_path = os.path.join(data_root, "dog_cat")
    
        assert os.path.exists(image_path), "{} path does not exist.".format(image_path)
        #断言函数是对表达式布尔值的判断,要求表达式计算值必须为真。可用于自动调试。
        #如果表达式为假,触发异常;如果表达式为真,不执行任何操作。
        #训练集所在的位置,并且将训练集的图片进行处理
    
    
        #ImageFolder假设所有的文件按文件夹保存好,
        # 每个文件夹下面存贮同一类别的图片,文件夹的名字为分类的名字。
        #train 文件夹下的 图片进行处理
        train_dataset = datasets.ImageFolder(root=os.path.join(image_path, "train"),
                                             transform=data_transform["train"])
        train_num = len(train_dataset)
    
        # {'daisy':0, 'dandelion':1, 'roses':2, 'sunflower':3, 'tulips':4}
        #{'cat':0,'dog':1}
        flower_list = train_dataset.class_to_idx
        #将键值和index 反过来
        cla_dict = dict((val, key) for key, val in flower_list.items())
        # write dict into json file
        json_str = json.dumps(cla_dict, indent=2)
        #通过json 将索引与类别对应起
        with open('class_indices.json', 'w') as json_file:
            json_file.write(json_str)
    #batch_size 每次获取32张图片进行训练
        batch_size = 32
        #number workers 加载训练数据所使用的线程数,在win 中不能设置为非0
        #0表示使用主线程训练
        nw = min([os.cpu_count(), batch_size if batch_size > 1 else 0, 8])  # number of workers
        print('Using {} dataloader workers every process'.format(nw))
    
        train_loader = torch.utils.data.DataLoader(train_dataset,
                                                   batch_size=batch_size, shuffle=True,
                                                   num_workers=nw)
    
        validate_dataset = datasets.ImageFolder(root=os.path.join(image_path, "test"),
                                                transform=data_transform["val"])
        val_num = len(validate_dataset)
        validate_loader = torch.utils.data.DataLoader(validate_dataset,
                                                      batch_size=4, shuffle=False,
                                                      num_workers=nw)
    
        print("using {} images for training, {} images fot validation.".format(train_num,
                                                                               val_num))
        # test_data_iter = iter(validate_loader)
        # test_image, test_label = test_data_iter.next()
        #
        # def imshow(img):
        #     img = img / 2 + 0.5  # unnormalize
        #     npimg = img.numpy()
        #     plt.imshow(np.transpose(npimg, (1, 2, 0)))
        #     plt.show()
        #
        # print(' '.join('%5s' % cla_dict[test_label[j].item()] for j in range(4)))
        # imshow(utils.make_grid(test_image))
    
        net = AlexNet(num_classes=2, init_weights=True)
    
        net.to(device)
        loss_function = nn.CrossEntropyLoss()
        # pata = list(net.parameters())
        #定义一个优化器
        optimizer = optim.Adam(net.parameters(), lr=0.0002)
    
        epochs = 10
        save_path = './AlexNet.pth'
        best_acc = 0.0
        train_steps = len(train_loader)
        for epoch in range(epochs):
            # train
            #使用net.train()就会启用dropout 方法
            net.train()
            running_loss = 0.0
            train_bar = tqdm(train_loader)
            #遍历数据集
            for step, data in enumerate(train_bar):
                images, labels = data
                #清空之前的梯度信息
                optimizer.zero_grad()
                #正向传播
                outputs = net(images.to(device))
                loss = loss_function(outputs, labels.to(device))
                #反向传播到每一个节点当中
                loss.backward()
                #更新节点参数
                optimizer.step()
    
                # print statistics
                running_loss += loss.item()
    
                train_bar.desc = "train epoch[{}/{}] loss:{:.3f}".format(epoch + 1,
                                                                         epochs,
                                                                         loss)
    
            # validate
            #关闭drop_oup 方法
            #利用测试集 对训练的结果的准确率计算
            net.eval()
            acc = 0.0  # accumulate accurate number / epoch
            with torch.no_grad():
                val_bar = tqdm(validate_loader, colour='green')
                for val_data in val_bar:
                    val_images, val_labels = val_data
                    outputs = net(val_images.to(device))
                    predict_y = torch.max(outputs, dim=1)[1]
                    acc += torch.eq(predict_y, val_labels.to(device)).sum().item()
    
            val_accurate = acc / val_num
            print('[epoch %d] train_loss: %.3f  val_accuracy: %.3f' %
                  (epoch + 1, running_loss / train_steps, val_accurate))
    
            if val_accurate > best_acc:
                best_acc = val_accurate
                torch.save(net.state_dict(), save_path)
    
        print('Finished Training')
    
    
    if __name__ == '__main__':
        main()
    
    • predict.py
    import os
    import json
    
    import torch
    from PIL import Image
    from torchvision import transforms
    import matplotlib.pyplot as plt
    
    from model import AlexNet
    
    
    def main():
        device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    
        data_transform = transforms.Compose(
            [transforms.Resize((224, 224)),
             transforms.ToTensor(),
             transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
    
        # load image
        img_path = "D:\python\CV_practice\\122.jpg"
        assert os.path.exists(img_path), "file: '{}' dose not exist.".format(img_path)
        img = Image.open(img_path)
    
        plt.imshow(img)
        # [N, C, H, W]
        img = data_transform(img)
        # expand batch dimension
        img = torch.unsqueeze(img, dim=0)
    
        # read class_indict
        json_path = 'D:\python\CV_practice\AlxNet_torch\class_indices.json'
        assert os.path.exists(json_path), "file: '{}' dose not exist.".format(json_path)
    
        json_file = open(json_path, "r")
        class_indict = json.load(json_file)
    
        # create model
        model = AlexNet(num_classes=2).to(device)
    
        # load model weights
        weights_path = "D:\python\CV_practice\AlxNet_torch\AlexNet.pth"
        assert os.path.exists(weights_path), "file: '{}' dose not exist.".format(weights_path)
        model.load_state_dict(torch.load(weights_path))
    
        model.eval()
        with torch.no_grad():
            # predict class
            output = torch.squeeze(model(img.to(device))).cpu()
            predict = torch.softmax(output, dim=0)
            predict_cla = torch.argmax(predict).numpy()
    
        print_res = "class: {}   prob: {:.3}".format(class_indict[str(predict_cla)],
                                                     predict[predict_cla].numpy())
        plt.title(print_res)
        print(print_res)
        plt.show()
    
    
    if __name__ == '__main__':
        main()
    

    在这里插入图片描述
    最终训练的准确率为 0.57在这里插入图片描述

    经过多次调参准确率达到72%

    更详细的可以参考文章

    展开全文
  • 企业级应用是企业软件应用中的一个类别,被称为软件开发领域的“明珠”。典型的企业级应用通常可以分为三个大类,即支撑企业核心业务的应用系统(如生产制造业的MES、交通运输业的TMS)、涵盖企业全流程的大规模综合...

    企业级应用是企业软件应用中的一个类别,被称为软件开发领域的“明珠”。典型的企业级应用通常可以分为三个大类,即支撑企业核心业务的应用系统(如生产制造业的MES、交通运输业的TMS)、涵盖企业全流程的大规模综合型系统和基于行业软件定制开发的个性化模块。这些企业级应用支撑着企业的核心业务发展,为推进企业数字化打下坚实的基础。

    互联网应用 vs 企业级应用

    随着信息化的推进,企业对定制化应用的需求也日渐增长。这对于技术负责人来说,这既是机遇也是挑战:该如何才能在有限的预算下,快速开发出与企业业务需求贴合的企业级应用呢?随着低代码技术的问世,模型驱动的开发方式,革命性的生产力优势,让越来越多的开发团队引入低代码技术,加速企业级应用落地。
    在这里插入图片描述

    企业级应用对开发工具提出更高的技术要求

    然而,与常见的互联网应用项目相比,支撑企业核心业务的企业级应用具有高价值、高复杂度和高技术标准等特点。这些特性决定了能够开发企业级应用的工具,必然能够满足互联网应用的开发,反之则不尽然。这就意味着选择一款企业级应用低代码开发平台,除了生产力外,还需关注工具本身的技术架构、开放程度及安全可控性等关键指标。
    软件开发工具为企业数字化提速
    本文将从系统架构开始,以活字格企业级低代码开发平台为例,从开发流程到编程扩展,全面介绍具备能够支撑企业级应用开发的低代码开发工具,及这类工具的系统架构。
    活字格企业级低代码开发平台

    开发流程与协作方式,支撑敏捷化团队管理

    现代的软件开发流程与协作模式,凝聚了数代软件人的智慧,并形成了完整的生态系统,广泛服务于包括企业级软件在内的各类软件项目。活字格企业级低代码开发平台出自全球领先的开发技术提供商葡萄城,站在了巨人的肩膀上,可适配业界主流的敏捷式开发流程,覆盖应用开发的全生命周期。

    在顶层架构上看,活字格的由活字格设计器、活字格服务器、以及第三方提供的协作服务器构成,覆盖企业级应用开发的全生命周期。

    通常情况下,开发者使用活字格开发企业级应用的流程如下:

    1. 开发者使用安装在自己电脑上的活字格设计器,启动开发工作
    2. 如需与其他开发者组成团队,共同推进项目开发,或者需要进行版本管理,开发者可以利用协作服务器(如码云、GitHub等互联网或安装在局域网内的 Git 服务器)和其他开发者进行协作
    3. 开发者在自己的电脑上,使用活字格设计器构建数据表、服务端逻辑、页面等元素,完成应用开发和调试后,可以利用一键发布功能,将应用打包成可发布文件,部署到安装有活字格服务器程序的服务器上
    4. 完整的活字格服务器由活字格服务器程序和管理控制台网站构成。其中,系统管理员可以通过管理控制台,可视化管理系统用户和权限,并且完成网络安全、自动备份等配置工作
    5. 配置完成后,最终用户即可通过包括浏览器、APP、微信、钉钉等在内的多终端使用开发者构建的企业级应用了。

    活字格的开发流程

    如上图所示,使用活字格开发应用的流程与专业的纯代码开发并无显著差异,这意味着开发者可以充分借鉴软件开发行业中积累形成的项目管理经验,实行敏捷化的项目管理和更紧凑的产品迭代周期,满足大规模、高复杂度的企业级开发需求。

    开发出的应用架构,达到专业架构师水准

    为了让企业的软件系统长期可靠运行,规避“数据孤岛”带来的不便,企业级应用对可维护性和系统集成能力的要求远高于互联网应用。这就对低代码开发工具提出了更高的要求,不但要好用、好交付,还得好维护。而这一切,都得从使用低代码开发工具所构建的应用本身讲起。

    开发者使用活字格构建的应用为纯 HTML5 Web 应用,最终用户能通过 PC 浏览器、手机 APP、微信或者钉钉来使用。支撑该应用的各个引擎和类库,都凝聚了葡萄城在专业控件领域 40 年的技术积累,能全面满足企业级应用开发所需。此外,该 Web 应用还具有很强的开放性,支持多种主流数据库、各种系统集成插件和开放的 API 编程接口。
    活字格的系统架构

    在运行时层面,活字格的运行时架构,充分考虑了开发者对集中管理开发内容和灵活分发、复用开发成果的需求。使用活字格构建的应用由可发布文件和活字格服务器构成,可发布文件须在活字格服务器上加载和运行。可发布文件由活字格设计器生成,支持保存到本地,或一键发布到服务器,其内容包含了开发者所构建的全部内容,主要包含:

    • 支持 PC 端浏览器和移动端的页面。这些页面基于标准的 HTML5、CSS3 构建,兼容性好。
    • 用来描述业务逻辑和用户交互的脚本。脚本采用了活字格自定义的格式进行描述,支撑起工作流、自动化任务、ODATA服务等。相比于传统的脚本语言,活字格屏蔽了平台的差异,用户不需要关心这些脚本运行在 Windows 还是 Linux 的服务器,或 PC还是手机上的浏览器。
    • 使用第三方工具开发的程序集或脚本、样式文件。这些文件基于活字格提供的编程接口和最佳实践构建,可以与使用活字格构建的页面、业务逻辑和用户交互脚本完全融合,协同增效。

    使用活字格开发出的应用
    这些内容被打包在一个文件中,开发者可以随时使用活字格设计器打开和修改这些内容。为了进一步提升开发效率,活字格设计器还提供了依赖检查和自动更新功能。如开发者修改某个数据表中的列名,活字格设计器会自动检查使用到该列的页面和服务端逻辑,并自动进行更新,以确保系统正常运行。统一的开发工具配合自动更新功能,让活字格的后期维护成本远低于“自动生成源代码”的模式。

    活字格会定期升级以增强系统的功能和性能,而基础类库和服务程序与开发者构建的可发布文件互相分离的设计,能让开发者通过升级活字格的最新版本,及时享受到最新的软件开发技术,让自己开发的企业级应用,以最小的开发成本投入,跟上技术进步的浪潮。

    “模型驱动”模式,不惧复杂业务场景

    低代码开发平台在设计思想上可以分为“表单驱动”和“模型驱动”两种。前者将页面的表单和数据的存储结构合二为一,而后者则与纯代码开发类似,实现了数据与表现的完全分离。在业界的通行观点中,“表单驱动”具有更低的使用门槛和技术门槛,但是应用场景的局限性更高,通常仅用于开发简单的数据填报系统,很难用在企业级应用的开发过程中。

    为了满足企业级应用对业务场景复杂度以及对数据一致性的高要求,活字格采用“模型驱动”的理念进行设计。开发者可以在活字格设计器中,分别设计用于定义数据模型的数据表,供用户操作的页面,以及运行于服务器上、承载复杂业务逻辑的服务端命令。

    即便是没有受过专业编程训练的平民开发者也能轻松构建出专业级应用,达到满足数据库设计范式、表与页面分离式设计、前后端分离架构等软件开发行业广泛推荐的技术要求,为企业级应用的开发和维护打下坚实的基础。
    活字格采用模型驱动的开发方式

    编程扩展能力,开放无限可能

    众所周知,企业级应用的场景复杂多变,任何一款低代码开发平台都无法通过内置功能来覆盖所有企业级应用的开发所需。但是,考虑到培训和使用成本,国内的企业主通常更愿意为覆盖全部业务环节的系统买单。所以,编程扩展能力就成为企业级应用开发的重中之重。有了编程接口的支持,开发者可以用拖拉拽的方式,无编码实现绝大多数业务需求;用编码的方式,让其他业务需求成功落地。这样才能避免项目卡死在“最后一公里”,解除开发者的后顾之忧。

    不断进化的活字格已经可以让开发者用拖拉拽的方式构建出绝大多数企业级应用的功能,越来越多的企业级应用开发者在项目全程中都没有写过任何代码。但活字格并没有止步于此,为了满足企业级应用开发对扩展性的高要求,活字格还为系统的各个分层均提供了编程扩展能力。如果有必要,开发者能通过编程接口,精确修改各层的处理逻辑,为系统集成提供坚实的技术基础。编程接口的典型应用场景如下:

    • CSS 样式表:为表格或输入框精确设置外观样式,满足企业统一的UI设计风格要求
    • 前端编程接口:调用第三方硬件设备的 ActiveX /OCX 接口,集成图像采集、读卡器等硬件设备
    • 后端编程接口:在后端集成第三方 Web API 接口,集成互联网服务或行业软件
    • 数据库编程功能:通过存储过程或查询视图,提升系统的数据处理能力
      活字格的编程扩展能力
      总之,领先的技术架构是低代码开发技术能够支撑企业级应用开发的必要条件。作为国内低代码技术趋势的引领者,活字格凝聚了葡萄城专业开发控件领域40年的技术积累,可以为开发者提供专业级的工作流程与协作方式、模型驱动的开发模式以及覆盖各层的编程接口,帮助开发者快速交付前后端分离的企业级应用。

    如需了解活字格企业级低代码开发平台及其应用案例,欢迎在百度中搜索“活字格”,访问官网,查看更多内容,免费下载试用。

    展开全文
  • 微购PHP源代码

    2013-11-27 18:34:16
    您还在羡慕如今的美丽说,蘑菇街,pinterest,吗?不要羡慕,如今就有这样一款免费... 建议:做垂直化领域,某个类别 或 某个行业,优化排名,聚集某个群体的实际需求(提示:只要修改分类,就可以轻松做出行业站)。
  • 树形图常用于对分类变量进行可视化分析,树形图的面积代表了所对应类别的数量,常用于比较各类别在数量上的差异。 二、代码实现 数据来源于上市企业数据,通过绘制树形图,来比较不同行业的企业数量分布差异。 ...
  • 行业分类标准

    2014-09-30 15:43:57
    行业分类标准序号行业代码类别名称说明门类大类01A农、林、牧、渔业 本门类包括01-05大类。01农业 指对各种农作物的种植活动。02林业 指在荒山、荒地、沙丘和退耕地等一切可以造林的土地上进行的林木和竹子的种植...
  • 适用于以会员制客户管理模式为中心的服务性行业,如:餐饮娱乐、美容美发、休闲健身、洗浴中心、零售专卖、汽车美容等,有效提升企业客户的忠诚度,为企业创造价值。 功能列表: ◆业务中心(快速消费 消费收银 ...
  • 即每一个行业类别按照同一种经济活动的性质划分,而不是依据编制、会计制度或部门管理等划分。 2.行业分类的基本单位 参照联合国《所有经济活动的国际标准产业分类》(ISIC Rev. 4),本标准主要以产业活动单位和...
  • 企业客户资源管理系统的主要任务是实现对企业在各地区、各行业客户的综合管理。为了使本系统具有更广泛的实用性,系统中设计了地域管理,客户类别管理和客户职务管理等模块。
  • 首发于: 万能助手扩展开发:使用百度地图API接口分页获取信息_电脑...它可以获取指定地区指定行业类别的商家实体店的信息, 比如所在的地理位置经纬度、商家的电话号码等等, 有了商家电话就可以人工一个一个打...
  • UI设计是近年来新兴的行业之一,相比程序员整日和代码打交道,UI设计师工作相对轻松而薪资却不相上下。很多人想要从事UI设计,如何才能快速入门UI设计?以下是千锋郑州小编整理的相关资料。  UI设计师工作内容有...
  • 代码就是设计 2

    2005-08-20 14:34:00
    当前大多数的软件过程都试图把软件设计的不同阶段分离到不同的类别中。必须要在顶层的设计完成并且冻结后,才能开始编码。测试和调试只对清除建造错误是必要的。程序员处在中间位置,他们是软件行业的建造工人。许多...
  • NT 是网胜推出的一套行业开源网站,使用.net2.0开发,一般行业站需要的功能跟栏目多提供了,下面是针对站点的行业分类表相关的一些分析,需要修改代码时可以参考下. 行业分类表W_IndustryType字段介绍如下 ID 类别编号...
  • 钢铁行业规范条件申请报告 企 业 名 称:________________ (加盖公章) 申 报 日 期:________________ 填 报 人:________________ 联 系 电 话:________________ 一、企业概况 企业名称、所有制形式、注册...
  • 行业新闻:新闻发布:新闻标题,新闻内容(支持UBB代码,可以插入图片,排一些格式),新闻主要图片,新闻分类(新闻所在分类,由后台进行管理)发布人,发布来源,发布时间 (发布/存为草稿) 新闻管理:以列表...
  • 导航类别栏目无限多级分类,自由添加。 3、模板简洁美化大方,模板代码已做全面优化清晰无垃圾,加载速度飞快. 4、自带四套共20款600IT.COM原创背景可供用户自由"更换皮肤",新颖有趣. 按钮在网站右上角 地区...
  • 广告模块 可以在后台新增广告组,广告组可以包含多个广告,生成广告调用代码后可以在任意网站任意页面调用该广告,广告会自动分城市显示,可以发布多种广告形式,图片,文字,代码,连接,flash等。 友情连接模块 ...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 199
精华内容 79
关键字:

行业类别代码