简介
TensorBoard是TensorFlow自带的一个强大的可视化工具,也是一个Web应用程序套件。
使用
进入保存节点目录,输入:
tensorboard --logdir=.
即可看到节点信息,在网页输入ip地址加节点信息即可查看。
学习更多编程知识,请关注我的公众号:
[代码的路]
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Web
+关注
关注
2文章
1302浏览量
73639 -
tensorflow
+关注
关注
13文章
331浏览量
61849
发布评论请先 登录
相关推荐
热点推荐
发力AI超节点和AI推理服务器,华勤技术重磅亮相英特尔大会
电子发烧友原创 章鹰 近日,在2025英特尔技术创新大会上,华勤技术数据事业部总经理程励之指出,AI算力需求激增,万亿级模型参数需要多GPU高带宽互联,超节点已经成为产业共识,但是落地存在“设计困难、制造困难、部署&运维困难”三大挑战。 图1:华勤技术展台 电子发烧友拍摄 在展会当天,电子发烧友记者看到华勤技术展示的AI整机柜解决方案,现场工作人员介绍,华勤 AI 超节点搭载 Intel 最新 Birch Stream 平台,凭借顶尖计算性能,打造最高支持
破解储能协同难题!海亿新能推HBMS黑科技
电子发烧友网综合报道 随着“十五五”规划明确提出“大力发展新型储能,加快智能电网和微电网建设”,储能产业正式迈入技术创新与模式变革的双轮驱动期。在众多新型储能模式中,以“锂电池+液流电池”为核心的混合储能凭借“多能融合、取长补短”的特性脱颖而出,不仅能有效弥补单一储能技术的缺陷,降低项目运行成本,更能实现“1+1>2”的经济效益——当电力波动发生时,其毫秒级的响应速度可迅速拉平频率波动,为电网稳定运行提供可
软通动力智慧出行二轮车解决方案荣膺鸿蒙杯大奖
12月5日,第十九届中国国际软件设计与应用大赛——鸿蒙应用开发赛(鸿蒙杯)总决赛颁奖典礼圆满落幕,作为鸿蒙生态核心合作伙伴,软通动力凭借深厚的技术积淀与创新实力从数十家参赛作品中脱颖而出,“软通动力智慧出行二轮车解决方案”成功斩获鸿蒙杯大奖。 中国国际软件设计与应用大赛是由成都市人民政府联合四川省经济和信息化厅、教育厅、人力资源和社会保障厅主办的综合性赛事,自2007年创办以来已连续举办十九届。本届大赛设置工
奥松电子荣获2025年广东省高新技术企业协会科学技术奖二等奖
2025年12月1日,广东省高新技术企业协会正式发布《关于2025年广东省高新技术企业协会科学技术奖授奖结果公告》(粤高企协〔2025〕23号)。广州奥松电子股份有限公司及子公司奥松半导体(重庆)有限公司、广州奥坤科技有限公司,联合申报的《新一代气体质量流量控制器的研发及产业化》项目,经项目申报、形式审查、网上初评、专家组终评及审核复核等程序,最终荣获2025年广东省高新技术企业协会科学技术奖二等奖。 “广东省高新技术企业协会科
ACDC模块电源选型的四个核心
[AC-DC模块]选型要围绕 电气性能、可靠性、兼容性、工程适配性 四方面核心维度,结合实际场景综合判断,避免因选型不当导致设备故障、效率低下或安全风险。 以下提供实操级选购指南,按“核心参数→可靠性→兼容性→工程细节” 等方面来展开: 一、核心电气参数:匹配负载是基础 1. [ 额定输出功率 ] (关键指标) 1.1.选型原则:负载总功率 ≤ 电源额定输出功率 × 70%~80%(预留 10%~20% 余量,避免满载发热、效率下降); 1.2.注意点: · 多口电源需
求助:错误1003发生于actor framework;导出EXE后,无法正常运行。。。
程序导出为EXE后,调试监控了一下,类在进入launch root actor后报错,错误如图,求大神指点!
发表于 12-06 17:02
飞凌嵌入式ElfBoard-文件I/O的深入学习之存储映射I/O
存储映射I/O(memory-mapped I/O)是一种基于内存区域的高级I/O操作,它能将一个文件映射到进程地址空间中的一块内存区域中,当从这段内存中读数据时,就相当于读文件中的数据(对文件进行read操作),将数据写入这段内存时,则相当于将数据直接写入文件中(对文件进行write操作)。这样就可以在不使用系统I/O操作函数read和write的情况下执行I/O操作。普通I/O方式一般是通过调用read和write函数来实现对文件的读写,使用read和 write读写文件时,函数经过层层的调用后,才能够最终操作到文件,中间涉及到很多的函数调用过程,数据需要在不同的缓存间传递,效率会比较低。对于存储映射I/O来说,由于源文件和目标文件都已映射到了应用层的内存区域中,所以直接操作映射区来实现文件复制。使用存储映射I/O减少了数据的复制操作,所以在效率上会比普通I/O要高。然而只有当数据量比较大时,效率的影响才会比较明显,如果数据量比较小,影响并不大,使用普通的I/O方式还是非常方便的。1.4.4.1 mmap用于将一个给定的文件映射到进程地址空间中的一块内存区域中。1.头文件#include2.函数原型void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);3.参数1)addr:用于指定映射到内存区域的起始地址。通常将其设置为NULL,这表示由系统选择该映射区的起始地址,这是最常见的设置方式;如果参数addr不为NULL,则表示由自己指定映射区的起始地址,此函数的返回值是该映射区的起始地址。2)length:指定映射长度,表示将文件中的多大部分映射到内存区域中,以字节为单位。3)prot:指定了映射区的保护要求,可取值如下:⚫PROT_EXEC:映射区可执行;⚫PROT_READ:映射区可读;⚫PROT_WRITE:映射区可写;⚫PROT_NONE:映射区不可访问。可将 prot 指定为为 PROT_NONE,也可将其设置为PROT_EXEC、PROT_READ、PROT_WRITE 中一个或多个(通过按位或运算符任意组合)。对指定映射区的保护要求不能超过文件 open()时的访问权限。4)flags:可影响映射区的多种属性,参数flags必须要指定以下两种标志之一:⚫MAP_SHARED:此标志指定当对映射区写入数据时,数据会写入到文件中,也就是会将写入到映射区中的数据更新到文件中,并且允许其它进程共享。⚫MAP_PRIVATE:此标志指定当对映射区写入数据时,会创建映射文件的一个私人副本(copy-onwrite),对映射区的任何操作都不会更新到文件中,仅仅只是对文件副本进行读写。除此之外,还可将以下标志中的0个或多个组合到参数flags中,通过按位或运算符进行组合:⚫MAP_FIXED:在未指定该标志的情况下,如果参数addr不等于 NULL,表示由调用者自己指定映射区的起始地址,但这只是一种建议、而并非强制,所以内核并不会保证使用参数 addr 指定的值作为映射区的起始地址;如果指定了MAP_FIXED标志,则表示要求必须使用参数addr指定的值作为起始地址,如果使用指定值无法成功建立映射时,则放弃。通常,不建议使用此标志,因为这不利于移植。⚫MAP_ANONYMOUS:建立匿名映射,此时会忽略参数fd和 offset,不涉及文件,而且映射区域无法和其它进程共享。⚫MAP_ANON:与MAP_ANONYMOUS 标志同义,不建议使用。⚫MAP_LOCKED:对映射区域进行上锁。5)fd:指定要映射到内存区域中的文件。6)offset:文件映射的偏移量,通常将其置为0,表示从文件头部开始映射。所以参数 offset 和参数 length 就确定了文件的起始位置和长度,将文件的这部分映射到内存区域中。参数addr和offset在不为NULL和0的情况下,addr和offset的值通常被要求是系统页大小的整数倍,可通过sysconf函数获取页大小: sysconf(_SC_PAGE_SIZE) 或 sysconf(_SC_PAGESIZE)需要注意参数length的值不能大于文件大小,即文件被映射的部分不能超出文件。4.返回值成功情况下,函数的返回值便是映射区的起始地址;发生错误时,返回(void *)-1,通常使用MAP_FAILED来表示,并且会设置errno来指示错误原因。1.4.4.2 munmap用于解除存储映射。1.头文件#include2.函数原型int munmap(void *addr, size_t length);3.参数addr:指定待解除映射地址范围的起始地址,它必须是系统页大小的整数倍。length:指定了待解除映射区域的大小(字节数)。需要注意的是,当进程终止时也会自动解除映射(如果程序中没有显式调用munmap),但调用close关闭文件时并不会解除映射。通常将参数addr设置为mmap函数的返回值,将参数length设置为mmap函数的参数length,表示解除整个由mmap函数所创建的映射。4.返回值会返回一个指向描述该错误的字符串的指针。5.示例基于前面2.1.7练习的程序,将其改为存储映射的方式。#include #include #include //strlen的头文件#include #include #include #include #include
int main(){int fda, fdb;char buf[30] = \"123456\\n\";size_t length = strlen(buf);void *addrA, *addrB;fda = open(\"./testA\", O_RDWR | O_CREAT | O_TRUNC, 0777);if ( fda < 0 ) { printf(\"error: A open\\n\"); return -1;}if ( write(fda, buf, strlen(buf)) != strlen(buf) ) { //通过strlen计算buf的实际字节长度 printf(\"error: testA write\\n\"); close(fda); return -1;}fdb = open(\"./testB\", O_RDWR | O_CREAT | O_TRUNC, 0777);if ( fdb < 0 ) { printf(\"error: testB open\\n\"); close(fda); return -1;}ftruncate(fdb,length);//由于是存储映射拷贝,需要设置testB文件的长度addrA = mmap(NULL, length, PROT_READ, MAP_SHARED, fda, 0);if (addrA == MAP_FAILED) { perror(\"mmap A\"); close(fda); close(fdb); return -1;}addrB = mmap(NULL, length, PROT_WRITE, MAP_SHARED, fdb, 0);if (addrB == MAP_FAILED) { perror(\"mmap B\"); close(fda); close(fdb); munmap(addrA, length); return -1;}memcpy(addrB, addrA, length);//内存数据拷贝munmap(addrA, length);munmap(addrB, length);close(fda);close(fdb);return 0;}6.编译运行并查看测试结果$ cat testA123456$ cat testB123456存储映射 I/O 方式并不是完美的,它所映射的文件只能是固定大小,因为文件所映射的区域已经在调用mmap函数时通过length参数指定了。另外,文件映射的内存区域的大小必须是系统页大小的整数倍,比如映射文件的大小为100字节,假定系统页大小为1000字节,那么剩余的900字节全部填充为0,虽然可以通过映射地址访问剩余的这些字节数据,但不能在映射文件中反应出来,由此可知,使用存储映射I/O在进行大数据量操作时比较有效;对于少量数据,使用普通I/O方式更加方便。
发表于 12-06 16:39
移动电源应用里,国产电容有没有成功取代日系品牌(如松下、贵弥功)同尺寸高容值电容的案例?
移动电源应用里,国产电容有没有成功取代日系品牌(如松下、贵弥功)同尺寸高容值电容的案例?
发表于 12-06 13:22
自己DIY的STM32F103C8T6最小系统板+ADC使用的是F103的ADC1
结合上篇这篇进行ADC输出,使用的是F103的ADC1.
下面进行,先在CUBEMX中进行配置。
设置好后,再进行输出。下面来点其它的资料,分享一下进行时查过的资料,了解一下ADC的功能与框图:掌握了ADC的功能框图,就可以对ADC有一个整体的把握,在编程的时候可以做到了然如胸,不会一知半解。 框图讲解采用从左到右的方式,跟ADC采集数据,转换数据,传输数据的方向大概一致。代码
view plaincopy to clipboardprint?
void MX_ADC1_Init(void)
{
/* USER CODE BEGIN ADC1_Init 0 */
/* USER CODE END ADC1_Init 0 */
ADC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN ADC1_Init 1 */
/* USER CODE END ADC1_Init 1 */
/** Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 4;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_1;
sConfig.Rank = ADC_REGULAR_RANK_2;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_2;
sConfig.Rank = ADC_REGULAR_RANK_3;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_3;
sConfig.Rank = ADC_REGULAR_RANK_4;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN ADC1_Init 2 */
/* USER CODE END ADC1_Init 2 */
}
void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(adcHandle->Instance==ADC1)
{
/* USER CODE BEGIN ADC1_MspInit 0 */
/* USER CODE END ADC1_MspInit 0 */
/* ADC1 clock enable */
__HAL_RCC_ADC1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/**ADC1 GPIO Configuration
PA0-WKUP------> ADC1_IN0
PA1------> ADC1_IN1
PA2------> ADC1_IN2
PA3------> ADC1_IN3
*/
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* ADC1 DMA Init */
/* ADC1 Init */
hdma_adc1.Instance = DMA1_Channel1;
hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma_adc1.Init.Mode = DMA_CIRCULAR;
hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
/* ADC1 interrupt Init */
HAL_NVIC_SetPriority(ADC1_2_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
/* USER CODE BEGIN ADC1_MspInit 1 */
/* USER CODE END ADC1_MspInit 1 */
}
}
ADC主函数运行代码
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_Delay(200);
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_buffer,4);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
for(int i = 0; i < 4; i++)
{
printf("ADCbuffer%d: %d \r\n", i, ADC_buffer);
HAL_Delay(100);
printf("ADCValue%d:%f \r\n", i, (ADC_buffer) * 3.3 / 4095);
HAL_Delay(100);
SEGGER_RTT_WriteString(0, "Hello World from SEGGER!666\r\n");
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
解析一下,使用到GPIO时候都必须开启对应的GPIO时钟,GPIO用于AD转换功能必须配置为模拟输入模式。定义 ADC 初始化结构体 ADC_InitTypeDef 用于配置 ADC 工作模式。先调用 RCC_APB2PeriphClockCmd() 开启 ADC 时钟,再通过 RCC_ADCCLKConfig() 配置 ADC 工作时钟,其参数为 PCLK2 分频系数,且 ADC 时钟最大不能超 14M。对 ADC 工作参数具体配置:设为独立模式,单通道采集无需扫描,启动连续转换,采用内部软件触发,数据右对齐,转换通道选 1,调用 ADC_Init 函数完成 ADC1 工作环境配置。使用 ADC_RegularChannelConfig 函数绑定 ADC 通道转换顺序和时间,它有 4 个形参,分别用于选择 ADC 外设、通道、转换顺序和采样周期,采样周期影响转换数据输出周期与精度。利用 ADC 转换完成中断可确保读取到稳定数据,通过 ADC_ITConfig 函数使能该中断,在中断服务函数中读取转换结果数据,以此实现 ADC 稳定且准确的转换与数据读取。环境环保网全球主机幽默开心多彩广西广东各地电子世界关爱动物公益网CAD交流
发表于 12-06 13:14
SiLM6601AD-7G 42V 微功率隔离反激式变换器
概述你是不是在设计车载传感器接口、工业现场总线或智能电表时,正为一个棘手的问题而焦虑:如何在有限的空间和成本内,为需要电气隔离的敏感电路提供一路可靠、高效的电源?传统的隔离反激方案,往往意味着你需要和光耦、第三辅助绕组、复杂的补偿网络打交道。布局复杂、元件众多、环路稳定性调试繁琐,每一次设计都像一次“闯关”。而面对日益严苛的汽车和工业环境,如何保证方案的长期可靠与高效,更是一个巨大的挑战。如果你正在为这些问题寻找一个简洁而强大的答案,那么SiLM6601AD-7G微功率隔离反激式变换器,或许就是那个能让你眼前一亮的解决方案。特性:
1.架构与集成:原边反馈 (PSR),无需光耦与第三绕组;内置1.2A/65V DMOS功率管;全集成补偿与软启动。
2.性能参数:宽输入电压:2.7V – 42V;最高6W隔离输出;低静态电流(睡眠145uA,工作350uA)。
3.工作模式:重载边界模式 (BCM) + 轻载低纹波突发模式。
4.可靠与安全:输出短路保护;通过AEC-Q100车规认证。
5.设计便捷性:SOT23-5超小封装;输出电压由单颗外部电阻设置。
方案优势:为何它是更优的选择?
前所未有的设计精简:这是它最颠覆性的优势。将传统隔离电源的“光耦+431+补偿网络”这一整套反馈环路,浓缩为原边控制技术。对于工程师而言,这意味着设计周期的大幅缩短,无需再为光耦的CTR(电流传输比)衰减、环路相位裕度而反复调试,显著降低了设计风险和人力成本。
满足严苛环境的可靠性:宽输入电压和内置保护是其“强健”的根基。42V的耐压使其能从容应对汽车环境下的电压瞬变。而AEC-Q100认证是一个关键背书,它不仅是一张进入汽车供应链的“通行证”,更是其高可靠性、长寿命、优异一致性的证明,这让它在工业PLC、户外仪表等环境恶劣的应用中同样值得信赖。
全负载范围的高性能表现:它打破了“小功率隔离电源效率低、纹波大”的刻板印象。边界模式与低纹波突发模式的智能结合,确保了从满载到空载都有优异能效。轻载时极低的输出纹波,对于供电给高精度传感器、ADC或低噪声运放等电路至关重要。
典型应用场景:
汽车电子:为车载CAN/LIN总线收发器隔离电源、电池管理系统的隔离采样、传感器接口模块供电。其车规认证是打入前装市场的关键。
工业控制:为PLC数字输入模块、隔离的RS-485/232通信接口、变频器驱动隔离电源提供安全、紧凑的解决方案。
智能表计与物联网:在智能电表、水表、气表中,为计量芯片与通信模块之间提供隔离电源,满足安规要求,同时其低功耗特性有助于延长电池寿命。
通用隔离电源:任何需要≤6W功率、500-3000Vdc电气隔离,且对成本、体积和可靠性有要求的场合,如医疗设备附件、安防设备等。
#微功率隔离反激式变换器 #开关电源芯片 #变换器 #SiLM6601
发表于 12-06 12:11
CODESYS协议的通讯协议库带VB和C#的例程源码
PC高级语言的CODESYS V3协议的通讯资源库,
可浏览PLC内的变量标签,包括常规变量、数组、结构体等;
可以批量读写各种类型的变量数据。
发表于 12-06 12:07
怎么样来解决CLASS D音频功放芯片对收音干扰的问题?
相信很多电子工程师在规划新产品开发项目时,都面临这样的痛点。要解决CLASS D数字功放对FM收音干扰的问题,首先我们要了解干扰源来自哪里---数字功放对收音的干扰多来自高频开关产生的电磁辐射和传导干扰;了解这个问题后,可从屏蔽、滤波、电路优化等方面解决,具体方法如下:
做好屏蔽隔离:给数字功放装金属屏蔽盒,收音模块也可单独屏蔽;两者间的连接线用屏蔽线,同时拉远功放与收音设备的距离,减少电磁辐射直接干扰。
强化滤波处理:在功放电源端加LC滤波器或π型滤波器,衰减电源线上的高频噪声;功放输出端加装低通滤波器,滤除高频开关谐波,避免其通过线路辐射干扰收音。若干扰集中在特定高频段,还可串联磁珠针对性滤波。
优化供电与接地:尽量给功放和收音设备配独立电源,或用隔离电源模块,避免干扰通过电源线传导;接地时用短而粗的导线,分开功放和收音模块的地线,减少地线环路带来的干扰。
调整功放参数:若功放支持,可调整其开关频率,避开收音的敏感频段;也可采用展频技术,让功放高频载波频率随时间小幅变动,分散干扰能量,降低对收音的影响。
优化布线布局:若为自制设备,优化PCB布线,缩小功放关键回路面积,避免高频信号线与收音设备的线路并行,减少信号耦合带来的干扰。
发表于 12-06 11:49
【嘉楠堪智K230开发板试用体验】基于 K230 的 参照HHB的 demo 实现基于 c 语言的自定义模型公交
as models
from torch.utils.tensorboard import SummaryWriter
import time
import copy
import os
def
发表于 09-07 00:45
【ELF 2学习板试用】ELF2开发板(飞凌嵌入式)部署yolov5s的自定义模型
scipy-1.10.1 seaborn-0.13.2 six-1.17.0 smmap-5.0.2 stack-data-0.6.3 sympy-1.13.3 tensorboard
发表于 02-04 18:15

TensorBoard的使用
评论