MINIEV们的黄金时代过去了

原创 autocarweekly 2023-09-25 14:11

文|嗷嗷胡


仅仅一年前还是顶流网红,一年后却挤不进新能源销量榜前十,这是五菱宏光MINIEV如今面对的尴尬。


MINIEV跌下神坛惊讶却不意外,无论它曾经多么得宠,也终究是一款2020年就上市的车型。越是低价市场产品更迭越频繁,3年时间足够竞争格局读档重写。


意外的是,颠覆宏光MINIEV销量霸主地位的并不是“另一个MINIEV”。真正的威胁来自更高一个级别:尺寸、售价与“MINIEV们”完全不在同一重量级的小型电动车,比亚迪海鸥。


一款3~5万元(主销版本)的微型电动车,被一辆7~9万元的小型电动车挤下了神坛,怎么看都好像是一场消费升级?



更大就好,更贵无妨


18个月之前,敝号就提出过《“MINI EV”这股风还会刮多久?》(没错,还是我)。当时宏光MINIEV还是各家争相模仿的对象,五菱正与GAMEBOY联名造势。


当然了咱不是那种蒙对一次就生怕别人不知道的神棍,客观世界的随机性和规律一样应该被尊重。彼时是C-NCAP专为微型电动车推出了一套碰撞测试标准,似乎是为野蛮生长的“MINIEV们”画出了第一道线。



不过一年多以来,C-NCAP真正测过的微型电车只有区区两款。并且碰撞安全在这个专项评价规程中也只是一部分而已,不及我们熟悉的C-NCAP、中保研碰撞测试那样惹人关注和分量十足。


微型电动车专项评价规程的出现,可能并不是也不足以使微型电车重视安全的程度看齐主流乘用车,而只能说是希望起到部分引导作用。


一两年过去,经历了原材料成本先涨再落,宏光MINIEV涨过价也降过价,推出了更精致的马卡龙版和抢手的敞篷版,但最基础的版本仍维持着最初的模样:3万块、120km、无气囊。


当然不光是五菱一家,其他类似MINIEV的微型电车,也基本就是“3万块120km、4万多170km、基础版无气囊”这么一个状态,新老竞争之下谁也没比谁多榨出油水。



五菱迎接了奇瑞小蚂蚁、风光MINIEV、长安Lumin、奇瑞QQ冰淇淋、吉利熊猫mini的轮番冲击,然而最终夺走王冠的,却是根本不属同一级别的比亚迪海鸥。


今年4月上市之后,5月海鸥销量破万,6月破两万,7月接近3万辆,8月冲到了惊人的近3.5万辆,仅次于Model Y位居纯电月销榜次席。即便不区分油电的所有车型中,海鸥仍能跻身TOP3。


另一边,五菱在5万元以下微型车中仍居第一,只不过8月销量已经只剩约1.6万辆,相比去年同期直接砍半;四月份跌破2万辆大关,近几个月1.5万辆对于宏光MINIEV也成了坎。


如果对这些数字没有概念——2022年五菱卖出了约40.5万辆(零售)宏光MINIEV,即平均单月销量超过了3.3万辆;新能源月销量榜TOP3中,永远有一席是被五菱小车牢牢锁死的。



5万元以下微车市场,宏光MINIEV最大的挑战来自稍大一圈的长安Lumin,8月销量榜上仅次于五菱。不过即便把五菱的约1.6万辆和Lumin的约1.3万辆加起来,也仍离宏光MINIEV的巅峰期有明显差距。


且不说海鸥这样明显更大、更贵的非直接竞品,如果限定在“类MINIEV”的微型电车品类,作为从五菱手中抢走份额最多、最成功的挑战者,Lumin相对于宏光MINIEV也有着明显的升级色彩。


比如Lumin车长达到了3.27米,而宏光MINIEV是2.92米,对于如此小车差距已算明显。Lumin的车身更宽更矮,风挡玻璃更倾斜,于是整车的观感和比例也更贴近主流车型。


比如Lumin入门版就有41马力和155km续航,较五菱的27马力和120km也是“惊人提升”;比如Lumin全系标配了双气囊,当然Lumin的起步价也比宏光MINIEV高了1万元还多。



且放下海鸥不说,总体而言,微型电车市场也呈现出了一种升级趋势:更贵的价格并不是阻碍。大型化的微车受到欢迎,而像NanoEV、Air ev晴空这样有着长续航但更小的产品则得不到广泛认可。


Lumin几乎是宏光MINIEV直接竞品中最大、最贵的之一,而它抢走了最多的份额,且压倒性地甩开了第三名。最近曝光的新款宏光MINIEV也放大了尺寸,与目前更贵的GAMEBOY版看齐。


消费升级了?


上面还都是前菜,7万元级小型电动车市场出现爆款,向下压缩着微型电动车市场。它们更大、提供基本的五人空间、续航更长、行驶性能更佳、配置更高,整体上更能满足最低限度的私家车用途。


在比亚迪海鸥出现之前,“MINI EV品类”的开创者五菱也在尝试各种其他的可能性。比如个性化的宝骏KiWi,脱胎于宏光MINIEV走硬派画风的悦也,以及相对最接近海鸥的四门小车缤果。


市场风向的变化,证明这些尝试背后的担忧是颇有预见性的。乘联会统计的今年1-8月销量,A00级轿车市场同比萎缩了超过四成,而A0级轿车则迎来了超过80%的增幅。



一增一降,两个细分市场地位逆转:一般而言更贵的A0级市场份额(3.7%)反常理地超过了相对更廉价的A00级(3.1%)。就在去年同期,A00级份额达5.4%,而A0级不过才2.1%。


尽管这一统计口径为全体乘用车,并未区分新能源身份与否,不过由于近来微型和小型轿车销量中纯电已占了绝大多数,所以依然足以说明大体上的相对变化。


可能会有人质疑,小型车怎么能越级对微型车构成威胁?实际上我们平时用价格、车身来划分细分市场,本就是一种为方便分析而简化了现实的做法,并不是说消费者真就一定会先卡死预算、再严格按预算选车。


我们生活中其实不难遇到:小A纠结于买一辆5系还是GLC(轿车or SUV)、老C犹豫加钱上卡宴还是赶新潮买台理想还省几十万……人是活的,预算是机动的,只不过上下浮动的区间大小可能有别。


而宏光MINIEV所开启的微型电动车市场,恰恰面对的是一群预算高度灵活的消费者。


按常理,越是低价市场,预算上浮空间应该越有限才对。经济型车甚至每5000元就可算一档,这里的消费者往往精打细算。但“MINI EV们”例外,虽然它们更廉价,用户却可能(相对于价格)更宽裕。


因为“MINI EV们”实在满足不了主流用车需求,双门2+2座、安全性存疑、极速普遍100km/h、实际续航不够出外环,它们几乎没可能作为家庭的唯一用车,与大一码的小型车之间存在着质的差距。


这两张图人数场景颠倒一下还差不多


当然,也肯定有少数需求较低的用户刚好与微型电车情投意合。但较常规的家用车而言,“MINI EV们”一定有大得多的比例,是家庭第二乃至第三辆车,以及在某一时期作“占牌”用。这两个需求也可能重叠:既有占牌的考虑,也能在至少部分用车场景作为补充。


乍一看,仅售3万元的“MINI EV们”是非常廉价的普惠出行工具。但实际上它们割舍了太多东西、实际用途过于狭窄,哪怕不考虑车位成本等外围因素,本质上也是比8-10万元小型车更为“奢侈”的东西——后者至少是一辆功能全面的“车”。


还是以海鸥为例,比“MINI EV们”贵了近一倍,但换得的是300km+标称续航、能应付高速的130km/h极速、更大轴距轮距的高速稳定性、五门的便利性、基本的四人乘坐和装载空间、标配四气囊的被动安全基础。


一个只适合作为“添头”,另一个可以提供最起码的“将就”。可是今年以来,汽车市场所发生的变化恰恰不利于前者。



一方面车辆号牌放宽,明确了各地不得新增限购措施。无论是纯粹的占牌,还是部分出于占牌考虑,廉价微车能以更低成本“占坑”的优势没有了,相应的“用途-价格比”不足的劣势被放大了。


另一方面经济复苏不及预期导致居民消费不足,不利于汽车这类耐用消费品,也不利于可选消费品。而“用途很局限的第二/第三辆车”刚好debuff叠满,属于非常标准的“耐用且可选”消费品。


最后,按公众号“老孙论车”孙勇的统计,今年上半年,10-15万元取代了20-30万元成为销量占比最大的区间,汽车消费呈现出明显的重心下沉。5-10万元的占比,从去年的6.2%猛增至16.8%。


当然这并非权威性的统计数据,得出的所谓“汽车消费降级”只能作为一定程度上的参考。不过汽车消费的重心向下转移,也确实符合大家对经济预期现状的理解。


原打算买微型车占坑的人群,放弃对于未来的美好幻想,提前加点钱买小型车将就;原本可以负担紧凑型车的人群,如今只能负担得起小型车。这两种情况,都对“可提供最基本的完整用车体验的最低价车型”,即5-10万元小型电动车,是利好消息。


方盒子,不是我们的K-CAR


五菱第一次推出宏光MINIEV的时候,正值国内新造车点火升空之际,大家无不对这个小巧可人的方盒子抱有浓厚的兴趣和无尽的期待,仿佛看到了日本K-CAR的中国表亲。


宏光MINIEV和后来一众“MINI EV们”,也确实创造了奇迹:不光是说过去三年的绝对销量数字,更在于它们作为电动车几乎彻底占领了5万元以下市场,率先实现了燃油车的“零头化”。


五菱如何将宏光MINIEV打造成廉价却不低贱的现象级文化符号,这是足够单开一篇文章讨论的,也是完全值得承认和认可的。


只不过,三年来的全民狂欢,也让人们误以为每月三四万辆、常驻TOP3就应该是一辆MINIEV车型的常态。



考虑到国内的用车环境:避不开高架环路、平均通勤距离长、回老家自驾游对有车人近似“刚需”(买了车离得近却依然要抢高铁票?)……微型电动车本就不应是一种主流车型品类,起码不至于主流到月销三四万的程度。


其实哪怕相对于很多K-CAR,“MINI EV们”也要更小、用途更局限。K-CAR虽以方盒子著称,很多车型也会采用四门布局,尽可能用满3.4米的车长上限,与普通车辆更主要的尺寸差异是受1.48米宽度限制。



对于廉价小车,我们比日本消费者更需要起码的高速行驶能力,以应对无法规避的高架快速路;更需要四门四座,在低汽车保有量下满足多人乘坐;更需要“脱离城市”级的续航,在各种购车壁垒下给买车一个足够的理由。


海鸥给出了一个不错的组合:车长刚够基本的四门四座空间,宽度超1.7米不及MINIEV灵巧却有利于高速行驶,动力刚够让极速超过限速,续航300km刚能满足出游下限即市郊往返,也能满足相当部分人群的一周通勤,最后定价允许它标配四气囊。



其实五菱也有类似的组合,缤果的基本形态就与海鸥高度重叠,唯一的硬性短板是极速100km/h,意味着对高速的应对能力还是MINIEV级别。五菱即将推出的410km版本会补足这一问题,大概也说明了“起码的高速能力”对国人是刚需。


随着“MINI EV们”从顶流兼主流的市场地位,回退到一个相对其形态更为正常的销量水平。我们可以说真正适合国人的“中国版K-CAR”,就不应该是(看着很像K-CAR的)两门低速小方盒。


真正适合中国宝宝体质的“K-CAR”形态:最基本的四人空间为前提,最小化的体型;最起码的高速行驶能力为前提,最小化动力成本;最基本的续航能力为前提,最小化电池成本;最基本的安全配置为前提,最小化定价。



“MINI EV们”在过去三年的火爆,一度让大家误以为国人的用车需求已经能支持如此另类的产品形态卖成一种主流,于是也一度掩盖了它们看似廉价、实则(相对)奢侈的本质。


并不是说“MINI EV们”没有价值,绝对不是,历史会记住宏光MINIEV。而是说它们在过去三年的因缘际会下,实际上一度来到了一个不属于自己的市场地位高度,所以才会有今天的“失宠”。


作为一类门槛极低、充满个性的小车,“MINI EV们”中的佼佼者还是会有一片广阔的市场空间。只是,国内用车环境下适合主流低预算人群的理想车型,更可能属于不同于方盒子的另一种形态。


autocarweekly 车不只是代步工具,还是生活的一种刻度。
评论 (0)
  • RadarSensors_ARS404-21_cn数据手册​
    RadarSensors_ARS404-21_cn数据手册
  • 工业级液晶显示控制芯片RA8889ML3N原理图
    TFT-LCD液晶显示控制芯片RA8889ML3N的优势:
    低功耗及功能强大:这款芯片最大支持分辨率为1366x2048,内置128Mb SDRAM,可为内容显示进行快速刷新,同时内置视频解码单元,支持JPEG/AVI硬解码播放,为普通单片机实现视频播放提供可能。
    支持多种接口:RA8889ML3N支持MCU端的8080/6800 8/16-bit 非同步并列接口和3/4线SPI及IIC串列接口,以及最大驱动1366x800分辨率的TFT LCD。
    显示功能强大:RA8889ML3N提供多段的显示记忆体缓冲区段,支持多图层功能,并提供画中画(PIP)、支持透明度控制与显示旋转镜像等显示功能。
    应用范围广:这款芯片广泛应用于自动化控制设备、电力监测控制、测量检测仪器仪表、电教设备、智能家电、医疗检测设备、车用仪表及工控自动化等领域。
  • 基于单片机的工业级液晶图形显示控制芯片RA8889ML3N-Datasheet
    TFT-LCD液晶显示控制芯片RA8889ML3N的优势:
    低功耗及功能强大:这款芯片最大支持分辨率为1366x2048,内置128Mb SDRAM,可为内容显示进行快速刷新,同时内置视频解码单元,支持JPEG/AVI硬解码播放,为普通单片机实现视频播放提供可能。
    支持多种接口:RA8889ML3N支持MCU端的8080/6800 8/16-bit 非同步并列接口和3/4线SPI及IIC串列接口,以及最大驱动1366x800分辨率的TFT LCD。
    显示功能强大:RA8889ML3N提供多段的显示记忆体缓冲区段,支持多图层功能,并提供画中画(PIP)、支持透明度控制与显示旋转镜像等显示功能。

    应用范围广:这款芯片广泛应用于自动化控制设备、电力监测控制、测量检测仪器仪表、电教设备、智能家电、医疗检测设备、车用仪表及工控自动化等领域。

    技术咨询与交流:QQ2851189731, 微信13760238805

  • 14、小电流贴片共模电感更换需要注意些什么.
    14、小电流贴片共模电感更换需要注意些什么.
  • 12、如何挑选立式磁棒电感厂家
    12、如何挑选立式磁棒电感厂家
  • 15、贴片叠层电感应用测试中不良率高的原因
    15、贴片叠层电感应用测试中不良率高的原因
  • 基于单片机的工业级液晶显示控制芯片
    TFT-LCD液晶显示控制芯片RA8889ML3N的优势:
    低功耗及功能强大:这款芯片最大支持分辨率为1366x2048,内置128Mb SDRAM,可为内容显示进行快速刷新,同时内置视频解码单元,支持JPEG/AVI硬解码播放,为普通单片机实现视频播放提供可能。
    支持多种接口:RA8889ML3N支持MCU端的8080/6800 8/16-bit 非同步并列接口和3/4线SPI及IIC串列接口,以及最大驱动1366x800分辨率的TFT LCD。
    显示功能强大:RA8889ML3N提供多段的显示记忆体缓冲区段,支持多图层功能,并提供画中画(PIP)、支持透明度控制与显示旋转镜像等显示功能。
    应用范围广:这款芯片广泛应用于自动化控制设备、电力监测控制、测量检测仪器仪表、电教设备、智能家电、医疗检测设备、车用仪表及工控自动化等领域。
  • RadarSensors_ARS308-21_cn数据手册
    RadarSensors_ARS308-21_cn数据手册
  • [完结19章]SpringBoot开发双11商品服务系统
    今天给大家分享一下关于SpringBoot开发双11商品服务系统的整个流程,我将深度还原大厂实习期技术成长全流程,让你收获大厂项目开发全流程与实战经验,具备应对大流量场景问题的解决能力,全面助力提升实习/转正/跳槽表现力与成功率。


    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

    目的
    让大家更容易使用 spring,更容易集成各种常用的中间件、开源软件。
    SpringBoot 基于 Spring 开发, SpringBoot 本身并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。
    SpringBoot 不是用来替代 spring 的解决方案,而是和 spring 框架紧密结合提升 spring 开发者体验的工具。

    准备测试数据
    我们先导入准备好的测试数据,这个测试数据是一份商品数据。

    字段包含商品id,name(商品名)
    last_month_sales(最近一个月的销量)
    favorites(收藏数)这几个字段,我们主要是通过商品名来搜索。
    首先我先先创建一个商品索引
    PUT goods
    {
      "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 0
      },
      "mappings": {
        "properties": {
          "id": {
            "type": "keyword",
            "doc_values": false,
            "norms": false,
            "similarity": "boolean"
          },
          "name": {
            "type": "text"
          },
            "price": {
            "type": "double"
          },
          "last_month_sales": {
            "type": "long"
          },
          "favorites": {
            "type": "long"
          },
          "year":{
            "type": "short"
          }
        }
      }
    }
    千里之行,始于足下。想要舒舒服服地使用Spring框架,就要把它的开发环境配置好,这对它好,也对我好。

    1. jdk 的配置       
    使用 IDEA 进行开发,在 IDEA 中配置 jdk 的方式很简单,打开 File->Project Structure选择 SDKs。
    在 JDK home path 中选择本地 jdk 的安装目录。
    在 Name 中为 jdk 自定义名字通过以上三步骤,即可导入本地安装的 jdk。如果是使用 STS 或者 eclipse 可以通过两步骤添加:
    window->preference->java->Instralled JRES 来添加本地 jdk。
    window-->preference-->java-->Compiler 选择 jre,和 jdk 保持一致。
    PUT test_index/_doc/1
    {
      "string_field":"imooc",
      "int_field": 100,
      "float_field":3.14,
      "bool_field":true,
      "date_field":"2022/03/16",
      "obj_field":{"key1":"value1","key2":100},
      "array_field1":[100,3.14],
      "array_field2":[100,"200"],
      "array_field3":["2022/03/16","100"],
      "array_field4":["100","2022/03/16"],
      "null_field":null
      }
      创建 Spring Boot 项目后需要进行 maven 配置。打开 File->settings,搜索 maven,配置一下本地的 maven 信息。在 Maven home directory 中选择本地 Maven 的安装路径;在 User settings file 中选择本地 Maven 的配置文件所在路径。在配置文件中配置一下国内阿里的镜像,这样在下载 maven 依赖时,速度会变得很快。
    {
      "test_index" : {
        "mappings" : {
          "properties" : {
            "array_field" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            },
            "bool_field" : {
              "type" : "boolean"
            },
            "date_field" : {
              "type" : "date",
              "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
            },
            "float_field" : {
              "type" : "float"
            },
            "int_field" : {
              "type" : "long"
            },
            "obj_field" : {
              "properties" : {
                "key1" : {
                  "type" : "text",
                  "fields" : {
                    "keyword" : {
                      "type" : "keyword",
                      "ignore_above" : 256
                    }
                  }
                },
                "key2" : {
                  "type" : "long"
                }
              }
            },
            "string_field" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        }
      }
    }

    从以上结果中,我们可以看到 Spring Boot 通过MVN方式自动为项目配置了对应的 springframework、logging、jackson 以及 Tomcat 等依赖,而这些正是我们在开发 Web 项目时所需要的。

    那么细心的同学可能会发现一个问题,即在以上 pom.xml 的配置中,引入依赖 spring-boot-starter-web 时,并没有指明其版本(version),但在依赖列表中,我们却看到所有的依赖都具有版本信息,那么这些版本信息是在哪里控制的呢? 
    {
      "_index" : "test_index",
      "_id" : "1",
      "_version" : 1,
      "_seq_no" : 0,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "string_field" : "Chan",
        "int_field" : 100,
        "int_string_field" : "100",
        "float_field" : 3.14,
        "bool_field" : true,
        "date_field" : "2022/03/16",
        "obj_field" : {
          "key1" : "value1",
          "key2" : 100
        },
        "array_field" : [
          "value1",
          "100"
        ],
        "null_field" : null
      }
    }
    spring-boot-starter-parent 是所有 Spring Boot 项目的父级依赖,它被称为 Spring Boot 的版本管理中心,可以对项目内的部分常用依赖进行统一管理。

    <parent>    

            <groupId>org.springframework.boot</groupId>    

            <artifactId>spring-boot-starter-parent</artifactId>    

            <version>2.5.6</version>    

            <relativePath/> 

    </parent>

    Spring Boot 项目可以通过继承 spring-boot-starter-parent 来获得一些缺省的配置内容,它主要提供了以下特性:

    默认 JDK 版本(Java 8)

    默认字符集(UTF-8)

    依赖管理功能

    资源过滤

    默认插件配置识别 

    application.properties 或 application.yml 类型的配置文件
    DELETE test_index

    PUT test_index
    {
      "mappings": {
        "dynamic":false 
      }
    }
    GET test_index/_search
    {
      "query": {
       "term": {
         "field1.field2": {
           "value": "imooc ES"
         }
       }
      }
    }

    GET test_index/_doc/4

    DELETE test_index

    PUT test_index
    {
      "mappings": {
        "dynamic":"strict" 
      }
    }


    POST test_index/_doc/2
    {
      "field1":{
       "field2":"imooc ES" 
      }
    }

    GET test_index/_search
    {
      "query": {
       "term": {
         "field1.field2": {
           "value": "imooc ES"
         }
       }
      }
    }

    GET test_index/_doc/4

    以下就是本文的全部内容,感谢大家观看
  • Wayking RadarSensors_LRR7710_中英文产品手册
    Wayking RadarSensors_LRR7710_中英文产品手册
  • CS5511数据手册
    CS5511是一个将DP/eDP输入转换为LVDS信号的桥接芯片,此外,CS5511可以用作在DP/eDP输入到DP/eDP输出场景中桥接芯片
  • 安科瑞 ASCB1系列智能微型断路器样本
    ASCB1 系列智能微型断路器是安科瑞电气股份有限公司全新推出的智慧用电产品,产品由智能微型断路器与智能网关两部分组成,可用于对用电线路的关键电气因素,如电压、电流、功率、温度、漏电、能耗等进行实时监测,具有远程操控、预警保护、短路保护、电能计量统计、故障定位等功能,应用于户内建筑物及类似场所的工业、商业、民用建筑及基础设施等领域低压终端配电网络。
  • 首个基于Transformer的分割检测+视觉大模型视频课程(23年新课+源码+课件)
    自动驾驶是高安全型应用,需要高性能和高可靠的深度学习模型,Vision Transformer是理想的选摔。现在主流的自动驾驶感知算法基本都使用了Vision Transformer相关技术,比如分割、2D/3D检测,以及最近大火的大模型 (如SAM),Vision Transformer在自动驾驶领域的落地方面遍地开花。5一方面,在自动驾驶或图像处理相关算法岗位的面试题中,Vision Transformer是必考题,需要对其理论知识有深入理解,并且在项目中真实的使用过相关技术。

    Transformer出自于Google于2017年发表的论文《Attention is all you need》,最开始是用于机器翻译,并且取得了非常好的效果。但是自提出以来,Transformer不仅仅在NLP领域大放异彩,并且在CV、RS等领域也取得了非常不错的表现。尤其是2020年,绝对称得上是Transformer的元年,比如在CV领域,基于Transformer的模型横扫各大榜单,完爆基于CNN的模型。为什么Transformer模型表现如此优异?它的原理是什么?它成功的关键又包含哪些?本文将简要地回答一下这些问题。

    我们知道Transformer模型最初是用于机器翻译的,机器翻译应用的输入是某种语言的一个句子,输出是另外一种语言的句子。
    var i *int = nil
    fmt.Println("i.size:", unsafe.Sizeof(i)) //8

    var i8 *int8 = nil
    fmt.Println("i8.size:", unsafe.Sizeof(i8)) //8

    var s *string = nil
    fmt.Println("s.size:", unsafe.Sizeof(s)) //8

    var ps *struct{} = nil
    fmt.Println("ps.size:", unsafe.Sizeof(ps)) //8

    var si []int = nil
    var si1 []int = nil
    fmt.Println("si.size:", unsafe.Sizeof(si)) //24

    var ii interface{} = nil
    fmt.Println("ii.size:", unsafe.Sizeof(ii)) //16
    我们以生成我,爱,机器,学习,翻译成<bos>,i,love,machine,learning,<eos>这个例子做生成过程来解释。
    训练:

    把“我/爱/机器/学习”embedding后输入到encoder里去,最后一层的encoder最终输出的outputs [10, 512](假设我们采用的embedding长度为512,而且batch size = 1),此outputs 乘以新的参数矩阵,可以作为decoder里每一层用到的K和V;
    将<bos>作为decoder的初始输入,将decoder的最大概率输出词向量A1和‘i’做cross entropy(交叉熵)计算error。
    将<bos>,“i” 作为decoder的输入,将decoder的最大概率输出词 A2 和‘love’做cross entropy计算error。
    将<bos>,“i”,“love” 作为decoder的输入,将decoder的最大概率输出词A3和’machine’ 做cross entropy计算error。
    将<bos>,“i”,"love ",“machine” 作为decoder的输入,将decoder最大概率输出词A4和‘learning’做cross entropy计算error。
    将<bos>,“i”,"love ",“machine”,“learning” 作为decoder的输入,将decoder最大概率输出词A5和终止符做cross entropy计算error。
    那么并行的时候是怎么做的呢,我们会有一个mask矩阵在这叫seq mask,因为他起到的作用是在decoder编码我们的target seq的时候对每一个词的生成遮盖它之后的词的信息。
    func main() {
    s := []string{"a", "b", "c"}
    fmt.Println("s:origin", s)
    changes1(s)
    fmt.Println("s:f1", s)

    changes2(s)
    fmt.Println("s:f2", s)

    changes3(s)
    fmt.Println("s:f3", s)
    }

    func changes1(s []string) {
    var tmp = []string{"x", "y", "z"}
    s = tmp
    }

    func changes2(s []string) {
    // item只是一个副本,不能改变s中元素的值
    for i, item := range s {
    item = "d"
    fmt.Printf("item=%s;s[%d]=%s", item, i, s[i])
    }
    }

    func changes3(s []string) {
    for i := range s {
    s[i] = "d"
    }
    }

    首先我们需要为每个输入向量(也就是词向量)创建3个向量,分别叫做Query、Key、Value。那么如何创建呢?我们可以对输入词向量分别乘上3个矩阵来得到Q、K、V向量,这3个矩阵的参数在训练的过程是可以训练的。注意Q、K、V向量的维度是一样的,但是它们的维度可以比输入词向量小一点,比如设置成64,其实这步也不是必要的,这样设置主要是为了与后面的Mulit-head注意力机制保持一致(当使用8头注意力时,单头所处理的词向量维度为512/8=64,此时Q、K、V向量与输入词向量就一致了)。我们假设输入序列为英文的"Thinking Machines"
    想要深度理解Attention机制,就需要了解一下它产生的背景、在哪类问题下产生,以及最初是为了解决什么问题而产生。

    首先回顾一下机器翻译领域的模型演进历史:

    机器翻译是从RNN开始跨入神经网络机器翻译时代的,几个比较重要的阶段分别是: Simple RNN, Contextualize RNN,Contextualized RNN with attention, Transformer(2017),下面来一一介绍。

    「Simple RNN」 :这个encoder-decoder模型结构中,encoder将整个源端序列(不论长度)压缩成一个向量(encoder output),源端信息和decoder之间唯一的联系只是: encoder output会作为decoder的initial states的输入。这样带来一个显而易见的问题就是,随着decoder长度的增加,encoder output的信息会衰减。
    func main(){
    var c = make(chan int)
    fmt.Printf("c.pointer=%p\n", c) //c.pointer=0xc000022180
    go func() {
    c <- 1
    addChannel(c)
    close(c)
    }()

    for item := range c {
    //item: 1
    //item: 2
    fmt.Println("item:", item)
    }
    }

    func addChannel(done chan int) {
    done <- 2
    fmt.Printf("done.pointer=%p\n", done) //done.pointer=0xc000022180
    }
    在测试模型的时候,Test:decoder没有label,采用自回归一个词一个词的输出,要翻译的中文正常从encoder并行输入(和训练的时候一样)得到每个单词的embedding,然后decoder第一次先输入bos再此表中的id,得到翻译的第一个单词,然后自回归,如此循环直到预测达到eos停止标记
    type visit struct {
    a1  unsafe.Pointer
    a2  unsafe.Pointer
    typ Type
    }

    func deepValueEqual(v1, v2 Value, visited map[visit]bool) bool {
    if !v1.IsValid() || !v2.IsValid() {
    return v1.IsValid() == v2.IsValid()
    }
    if v1.Type() != v2.Type() {
    return false
    }

    // We want to avoid putting more in the visited map than we need to.
    // For any possible reference cycle that might be encountered,
    // hard(v1, v2) needs to return true for at least one of the types in the cycle,
    // and it's safe and valid to get Value's internal pointer.
    hard := func(v1, v2 Value) bool {
    switch v1.Kind() {
    case Pointer:
    if v1.typ.ptrdata == 0 {
    // not-in-heap pointers can't be cyclic.
    // At least, all of our current uses of runtime/internal/sys.NotInHeap
    // have that property. The runtime ones aren't cyclic (and we don't use
    // DeepEqual on them anyway), and the cgo-generated ones are
    // all empty structs.
    return false
    }
    fallthrough
    case Map, Slice, Interface:
    // Nil pointers cannot be cyclic. Avoid putting them in the visited map.
    return !v1.IsNil() && !v2.IsNil()
    }
    return false
    }

    if hard(v1, v2) {
    // For a Pointer or Map value, we need to check flagIndir,
    // which we do by calling the pointer method.
    // For Slice or Interface, flagIndir is always set,
    // and using v.ptr suffices.
    ptrval := func(v Value) unsafe.Pointer {
    switch v.Kind() {
    case Pointer, Map:
    return v.pointer()
    default:
    return v.ptr
    }
    }
    addr1 := ptrval(v1)
    addr2 := ptrval(v2)
    if uintptr(addr1) > uintptr(addr2) {
    // Canonicalize order to reduce number of entries in visited.
    // Assumes non-moving garbage collector.
    addr1, addr2 = addr2, addr1
    }

    // Short circuit if references are already seen.
    typ := v1.Type()
    v := visit{addr1, addr2, typ}
    if visited[v] {
    return true
    }

    // Remember for later.
    visited[v] = true
    }

    switch v1.Kind() {
    case Array:
    for i := 0; i < v1.Len(); i++ {
    if !deepValueEqual(v1.Index(i), v2.Index(i), visited) {
    return false
    }
    }
    return true
    case Slice:
    if v1.IsNil() != v2.IsNil() {
    return false
    }
    if v1.Len() != v2.Len() {
    return false
    }
    if v1.UnsafePointer() == v2.UnsafePointer() {
    return true
    }
    // Special case for []byte, which is common.
    if v1.Type().Elem().Kind() == Uint8 {
    return bytealg.Equal(v1.Bytes(), v2.Bytes())
    }
    for i := 0; i < v1.Len(); i++ {
    if !deepValueEqual(v1.Index(i), v2.Index(i), visited) {
    return false
    }
    }
    return true
    case Interface:
    if v1.IsNil() || v2.IsNil() {
    return v1.IsNil() == v2.IsNil()
    }
    return deepValueEqual(v1.Elem(), v2.Elem(), visited)
    case Pointer:
    if v1.UnsafePointer() == v2.UnsafePointer() {
    return true
    }
    return deepValueEqual(v1.Elem(), v2.Elem(), visited)
    case Struct:
    for i, n := 0, v1.NumField(); i < n; i++ {
    if !deepValueEqual(v1.Field(i), v2.Field(i), visited) {
    return false
    }
    }
    return true
    case Map:
    if v1.IsNil() != v2.IsNil() {
    return false
    }
    if v1.Len() != v2.Len() {
    return false
    }
    if v1.UnsafePointer() == v2.UnsafePointer() {
    return true
    }
    for _, k := range v1.MapKeys() {
    val1 := v1.MapIndex(k)
    val2 := v2.MapIndex(k)
    if !val1.IsValid() || !val2.IsValid() || !deepValueEqual(val1, val2, visited) {
    return false
    }
    }
    return true
    case Func:
    if v1.IsNil() && v2.IsNil() {
    return true
    }
    // Can't do better than this:
    return false
    case Int, Int8, Int16, Int32, Int64:
    return v1.Int() == v2.Int()
    case Uint, Uint8, Uint16, Uint32, Uint64, Uintptr:
    return v1.Uint() == v2.Uint()
    case String:
    return v1.String() == v2.String()
    case Bool:
    return v1.Bool() == v2.Bool()
    case Float32, Float64:
    return v1.Float() == v2.Float()
    case Complex64, Complex128:
    return v1.Complex() == v2.Complex()
    default:
    // Normal equality suffices
    return valueInterface(v1, false) == valueInterface(v2, false)
    }
    }
    这便是encoder的整体计算流程图了,Transformer模型中堆叠了多个这样的encoder,无非就是输出连接输入罢了,常规操作。
    最后再附上一个Transformer的代码实现,读者有兴趣可以跟着自己复现一下Transformer模型的代码。
       package main

       import (
           "log"
           "sync"
       )

       func init() {
           log.SetFlags(log.Lshortfile)
       }
       func main() {
           lock := sync.Mutex{}

           //Go 1.18 新增,是一种非阻塞模式的取锁操作。当调用 TryLock() 时,
           //该函数仅简单地返回 true 或者 false,代表是否加锁成功
           //在某些情况下,如果我们希望在获取锁失败时,并不想停止执行,
           //而是可以进入其他的逻辑就可以使用TryLock()
           log.Println("TryLock:", lock.TryLock())
           //已经通过TryLock()加锁,不能再次加锁
           lock.Lock()

       }

  •     今天看到一个麦肯锡的统计数据,2021年中国出口的电子产品占世界34%。越来越多的PCB组件在中国造出来,然后送往全世界。作为电子工程师,除了增加修养,不断实现良好的设计,也要减少电子垃圾,对国际上的主要环保要求有所了解。    ROHS  Restriction of Hazardous Substances  有毒物质限制        这个标准针对 6 类电子产品中常见的的有毒物质,
    电子知识打边炉 2023-12-06 22:21 104浏览
  • ​无论当下看不看机会,把握行情肯定是没错。 通过岗位数量,岗位要求(如对学历,技术点的要求)来了解行情是有效途径之一。 可以找我了解更多全国岗位。 【嵌入式软件工程师】 上海,风电行业国资企业,对学历有要求。 岗位职责: 1. 负责产品全周期研发,包括市场调研、客户需求技术转化、产品设计、产品制造、产品安装调试、产品测试验证和产品认证; 2. 负责产品失效根因分析,提供有效解决方案; 3. 负责组织供应商选择和产品质量管控; 4. 组织编制产品开发技
    落子无悔 2023-12-06 13:27 58浏览
  • 近日,在传感器专家网的压力传感器专业交流群组中,有相关专家交流了目前我国压力传感器的一些情况。交流中指出,目前国内已有一些企业在做MEMS压力传感器芯片,在该领域国内相关企业总体来说技术差不多,精度等关键技术指标彼此间相差不大,但与国外压力传感器芯片巨头相比,精度等指标却有较大差距。传感器专家网https://www.sensorexpert.com.cn专注于传感器技术领域,致力于对全球前沿市场动态、技术趋势与产品选型进行专业垂直的服务,是国内领先的传感器产品查询与媒体信息服务平台。基于传感器
    传感器专家网 2023-12-06 11:03 50浏览
  • EL817光耦合器也称为光电耦合器或光隔离器,是一种采用DIP4(4引脚双列直插式封装)配置的多功能电子元件。通常由两个相互隔离的部分组成:一个发光二极管(LED)和一个接收光敏晶体管(OPTO)。它可以将电信号转换为光信号,从而达到隔离和传输信号的目的。本文让我们一起来探讨EL817的主要功能和规格。无卤素结构EL817光耦合器的设计充分考虑了环保意识,符合无卤素标准。它仅包含铜引线框架,确保溴(Br)含量小于900ppm,氯(Cl)小于900ppm,总卤素含量(Br+Cl)小于1500ppm
    腾恩科技-彭工 2023-12-06 10:19 85浏览
  • 来源:虹科汽车电子 虹科技术丨BabyLIN产品如何轻松搞定K线协议实现? 原文链接:https://mp.weixin.qq.com/s/LR7VHFQajjyw6s6bVDJmsg 欢迎关注虹科,为您提供最新资讯!   导读 为了实现K线通信,SDF-V3在协议部分中定义了新的协议类型KLine Raw。所有能够运行SDF-V3文件(LinWorks版本在V.2.29.4以上)并使用最新固件(固件版本在V.6.18以上)的BabyLIN设备都可以执行KLine Raw
    虹科电子科技 2023-12-06 14:42 105浏览
  • 背景   随着汽车行业的不断迭代发展,市场及消费者对汽车提出了更高的要求,智能网联、自动驾驶等新技术的应用推动整车厂对车载芯片、汽车软件等方面投入了更多的精力,SOA(面向服务的架构)逐渐成为大多整车厂顺应市场趋势和技术趋势的首选。SOA架构使服务间的通讯变得更加简单,ECU更新、软件升级等变得更加灵活,使系统的健壮性和拓展性获得了大幅提高。但是在SOA架构开发阶段,由于市面上的IDL(接口描述语言)众多,例如FIDL、Protobuf、vCDL、ARXML、OMG IDL、CAN
    北汇信息 2023-12-06 11:41 73浏览
  • 2023年,对我来说,是充满挑战和收获的一年。这一年,我实现了很多的愿望,也收获了许多意外之喜。汗水与收获并存,艰难与惊喜共立。 工作上,我负责的项目在经过漫长的调研后终于立项了。在原理功能的实现过程中,我不仅学到了很多新的知识和技能,也经历了许多挫折和困难,一筹莫展时的长期等待和有效结果的欣喜。不放弃成功才会向你招手,最终努力得到了回报,项目成功立项,这让我感到非常自豪和满足。 除了工作上的成就,生活中我也有很多收获。这一年,我踩着夏天的尾巴购买了人生中属于自己的第一辆摩托车。 像风
    无言的朝圣 2023-12-06 10:48 104浏览
  • #这段代码是一个基于C语言的嵌入式程序,用于在HPMicro平台上运行。它的主要功能是初始化一个LED灯,并使其以一定的时间间隔闪烁。#以下是对代码的解析:#```c#include #include "board.h"#include "hpm_debug_console.h"#define LED_FLASH_PERIOD_IN_MS 300int main(void){    int u;    board_init(); // 初始化板子 
    丙丁先生 2023-12-06 14:22 105浏览
  • 摘要:根据CINNO Research产业统计数据,Q3'23国内智能手机屏下指纹识别占比创历史新高达45%,而侧边指纹识别占比较去年同期下降12%,后置指纹识别占比下降至1%,而前置指纹已淡出国内智能手机指纹识别市场。根据CINNO Research产业统计数据,受华为、荣耀热门机型销售的影响,Q3'23国内智能手机指纹识别搭载率上升至84%。图示:中国市场智能手机指纹识别技术别占比趋势来源: CINNO Research月度中国市场智能手机指纹识别应用趋势报告2023年第三季度,国内OLED
    CINNOResearch 2023-12-06 12:53 91浏览
  • 近日,英国伦敦的可持续倡议(SMI)公布了2023年《地球宪章》徽章获奖名单。在这个名单中,全球共17家企业入选,中国企业仅占两席。最值得注目的是,海尔智家作为唯一获奖的中国家电企业,荣登榜单。 据了解,《地球宪章》徽章由现任英国国王查尔斯三世于2021年发起,旨在表彰对全球环境的可持续发展做出突出贡献的企业,鼓励企业将自然、人类和地球置于核心位置,通过创新和可持续的商业模式,共同应对全球气候挑战。获奖企业由来自环境、商业、政治和慈善界的全球专家小组经过严苛的评选选出。 海尔
    锦缎研究院 2023-12-06 12:41 53浏览
  • 光耦合器是一种在现代科技中发挥关键作用的设备,其应用领域横跨通信、医疗、工业等多个行业。光耦合器通过巧妙地将光电子器件结合起来,实现了光与电的高效转换和传输,为光电子领域的发展提供了强大的支持。光耦合器是什么光耦合器是一种用于隔离、耦合和传输光信号的器件。其主要功能是将一个光学系统的光信号转换成电信号,或者将电信号转换为光信号,以实现光与电之间的高效转换。在各类光电子设备中,光耦合器起到了桥梁的作用,实现了不同部分之间的无缝衔接。光耦合器的原理及结构光耦合器的基本原理是通过光电二极管和光电晶体管
    克里雅半导体科技 2023-12-06 10:58 31浏览
  • 导语:CINNO Research统计数据表明,Q3'23全球半导体设备厂商市场规模前十大公司合计超250亿美元,同比下降9%,环比增长3%。CINNO Research统计数据表明,Q3'23全球半导体设备厂商市场规模Top10营收合计超250亿美元,同比下降9%,环比增长3%。Q3'23全球半导体设备厂商市场规模排名Top10与1H'23的Top10设备商相比,日立高新(Hitachi High-Tech)排名跌出Top10,泰瑞达(Teradyne)排名回归第十。荷兰公司阿斯麦(ASML)
    CINNOResearch 2023-12-06 14:04 105浏览
  • 国产光耦是近年来中国电子产业中备受关注的领域之一。在全球电子市场的竞争中,中国光电行业正逐渐崭露头角。本文将详细分析国产光耦的发展趋势,探讨其未来发展的关键因素与前景。国产光耦的现状国产光耦是一种用于电气隔离和信号传输的关键电子元器件,广泛应用于通信、工控、医疗、消费电子等领域。随着中国电子制造业的不断壮大,国产光耦在市场上逐渐崭露头角。目前,国产光耦已经实现了从技术到市场的多方面突破,主要体现在以下几个方面:1. 技术创新国产光耦制造商不断投入研发,推动光耦技术的创新与升级。新材料的应用、封装
    克里雅半导体科技 2023-12-06 10:56 36浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦