利用TabNet进行股票长线预测

利用TabNet模型进行股票长线预测

提示:本篇文章只提供一个思路,因本人是金融小白,搭建模型时所参考的股票指标并不完善,所以结果准确性无法保证,各位不要将结果作为投资参考!!!

文章目录

  • 利用TabNet模型进行股票长线预测
  • 前言
  • 一、TabNet框架介绍及下载
    • 1.TabNet介绍
      • 为何使用TabNet?
    • 2.TabNet的Pytorch版下载
  • 二、从Tushare提取股票数据
    • 1.Tushare是什么?
    • 2.如何预测股票的长线情况?
      • 股票类型
      • 预测目标
      • 应用的股票指标
    • 3.从Tushare提取股票数据代码
  • 三、用TabNet训练数据
  • 四、测试数据并进行对比
    • 1.损失函数显示误差
    • 2.手动测试计算准确率
  • 六、总结
    • 1.误差分析
    • 2.未来展望


前言

重要的事情需要再次强调:本人是金融小白,人工智能初学者,第一次搭建股票预测模型,参考的股票指标并不全面,因此预测结果与真实值有较大误差,准确性无法保证,不要将预测结果作为投资的参考依据。
股票各指标均使用Tushare大数据开放社区提取,我的TushareID:423626。Tushare大数据社区网址:https://waditu.com/

一、TabNet框架介绍及下载

1.TabNet介绍

TabNet是一种具有可解释性的可以对表格数据进行高效分类和回归的模型。
论文题目: TabNet: Attentive Interpretable Tabular Learning
论文地址: https://arxiv.org/abs/1908.07442

为何使用TabNet?

目前决策树在处理表格数据上占据主导地位,其原因是:
1.表格数据存在近似的超平面边界,而决策树处理起来非常有效率。
2.在跟踪决策节点上,决策树具有高解释性。
3.决策树可以快速训练数据。
4.预先提出的DNN不适用于表格数据,因为传统DNN是基于多个传统层或多层感知,这会导致过参数化,使DNN找不到解决表格数据的最佳方法。

TabNet的优势:
1.与基于树的方法不同,TabNet可以输入未加工的数据,并且不需要任何特征处理。
2.TabNet在决策的每一步,使用序列注意力来选择特征进行推理。具有可解释性。
3.TabNet使用了非监督预训练来预测masked特征,该模型是第一个对表格数据进行自监督学习的。

2.TabNet的Pytorch版下载

Pytorch版下载: https://github.com/dreamquark-ai/tabnet
我使用的是Pycharm来运行TabNet,根据下载文件中的README_md文件完成库的安装。

二、从Tushare提取股票数据

1.Tushare是什么?

TuShare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。
在Tushare 旧版运行了3年后,Tushare Pro在大家的期待下,终于要跟大家见面了。可以略显激动地说,Pro版数据更稳定质量更好了,但Pro依然是个开放的,免费的平台,不带任何商业性质和目的。
Tushare运行三年多以来,数据从广度和深度都得到了提升,Pro版正是在此基础上做了更大的改进。数据内容将扩大到包含股票、基金、期货、债券、外汇、行业大数据,同时包括了数字货币行情等区块链数据的全数据品类的金融大数据平台,为各类金融投资和研究人员提供适用的数据和工具。
Tushare官方网站:https://waditu.com/

2.如何预测股票的长线情况?

股票类型

为了减小游资操控股票这一因素的影响,此次预测的目标为市值大于50亿的股票。

预测目标

预测目标为某一年(下方例子为2020年)市值大于50亿的股票当年最大涨幅。

应用的股票指标

作为直接输入的特征的股票指标有:
市盈率、市净率、净资产收益率、销售毛利率、每股现金流、每股未分配利润、每股营业收入、每股资本公积。

作为需要二次计算的股票指标有:
当前股价、前六个月股价、前六个月流通股本、前六个月净流入、当年每月的最高股价。

历史高低位系数(自定义):(当前股价 - 前六个月股价平均值)/ 当前股价
放缩量系数(自定义):前六个月净流入总和 / 前六个月流通股本总和
当年股价最高位:Max(当年每月最高股价)
当年股票最大涨幅:当年股价最高位 / 当前股价

3.从Tushare提取股票数据代码

以下代码用于下载2020年市值大于50亿股票数据。
代码如下:

# -*-encoding:utf-8-*-
import tushare as ts
import pandas as pd
import numpy as np
import timepro = ts.pro_api(token='***')
ts.set_token('***')# 所有股票列表。 返回值1:股票代码、名字、行业,有表头索引。 返回值2:所有股票代码,有表头索引
def all_code():stock_list = pro.stock_basic(exchange='', list_status='L', fields='ts_code,name,industry')code_list = stock_list['ts_code']return stock_list, code_list# 总市值大于50亿的股票。 输入值:所有股票代码,开年开盘日期。返回值:股票代码、市值、市盈率、市净率,有表头索引。
def stock_over50(code_list, date):over50_list = pd.DataFrame()for code in code_list:total_mv_list = pro.daily_basic(ts_code=code, trade_date=date, fields='ts_code, total_mv, pe, pb')time.sleep(0.1)try:if total_mv_list.iloc[0, 3] == None:time.sleep(0.2)elif total_mv_list.iloc[0, 3] > 500000:over50_list = pd.concat([over50_list, total_mv_list], axis=0)print(over50_list)time.sleep(0.2)else:time.sleep(0.2)except:passcontinueprint(over50_list)over50_list.to_csv('./over50_list_2020.csv', encoding='utf-8')return over50_list# 市盈率市净率。输入值:大于50亿股票。输出值:市盈率市净率列表。有表头索引:'pe', 'pb'
def pepb_list(over50_list):pepb = over50_list[['ts_code', 'pe', 'pb']]return pepb# 前一年的年报数据。输入值1:大于50亿列表。输入值2:去年年报时间,如20191231。输出值,年报数值,有表头索引
def year_news_list(code_list, date_lastyear):year_news1 = pro.fina_indicator(ts_code=code_list, period=date_lastyear)year_news2 = pd.DataFrame(year_news1).iloc[0:1, :]year_news3 = year_news2[['ts_code', 'roe', 'grossprofit_margin', 'cfps', 'undist_profit_ps', 'revenue_ps', 'capital_rese_ps']]time.sleep(0.1)# print(year_news3, 'years_news complete')return year_news3def history(code_over50):now = pro.monthly(ts_code=code_over50, start_date='20200201', end_date='20200228', fields='ts_code,trade_date,open')now = pd.DataFrame(now)time.sleep(0.1)avg6 = pro.monthly(ts_code=code_over50, start_date='20190801', end_date='20200131',fields='ts_code,trade_date,open')time.sleep(0.1)list_his = float(0)for i in avg6['open']:list_his = list_his + ihistory1 = list_his / 6history = (now['open'].at[0] - history1) / now['open'].at[0]history = '{:.2f}'.format(history)history = pd.DataFrame(list([history]), columns=['history_level'])# ts_code = now['ts_code']# all_history = pd.concat([ts_code, history], axis=1)# print(history)return history# 量:输入值:50亿以上股票。输出值:股票代码,量。有表头
def Vol(code_over50):mf_vol = pro.moneyflow(ts_code=code_over50, start_date='20191001', end_date='20200301')['net_mf_vol']time.sleep(0.1)float_share_get = pro.daily_basic(ts_code=code_over50, start_date='20191001', end_date='20200301',fields='ts_code, float_share')time.sleep(0.1)float_share = float_share_get['float_share']mf_vol_sum = sum(mf_vol)float_share_sum = sum(float_share)Vol = mf_vol_sum / float_share_sumVol_all = pd.DataFrame(list([Vol]), columns=['Vol'])# ts_code = pd.DataFrame(float_share_get['ts_code'])# list_all = pd.concat([ts_code.iloc[0:1, 0], Vol_all], axis=1)# print(Vol_all)return Vol_all# 计算一年内最高涨幅和最低跌幅。输入值:大于50亿股票代码。输出值1:股票代码,最大涨幅。输出值2:股票代码,最低跌幅。有表头
def Max_Min(code_over50):All_data = pro.monthly(ts_code=code_over50, start_date='20200301', end_date='20210101',fields='ts_code, open, trade_date, high, low')time.sleep(0.1)Max_data = max(All_data['high'])Min_data = min(All_data['low'])Open = pd.DataFrame(All_data).iloc[-1, 2]Max_vol = 100 * (Max_data - Open) / OpenMin_vol = 100 * (Min_data - Open) / OpenMax_pd = pd.DataFrame(list([Max_vol]), columns=['Max_vol'])Min_pd = pd.DataFrame(list([Min_vol]), columns=['Min_vol'])# ts_code = pd.DataFrame(All_data).iloc[0, 0]# ts_code = pd.DataFrame(list([ts_code]), columns=['ts_code'])# Max_list = pd.concat([ts_code, Max_pd], axis=1)# Min_list = pd.concat([ts_code, Min_pd], axis=1)return Max_pd, Min_pdstock_list, code_list = all_code()date = '20200301'
over50_list = stock_over50(code_list, date)
over50_list.to_csv('./over50_list_2020.csv')
over50_list = pd.read_csv('./over50_list_2020.csv')
code_over50 = over50_list['ts_code']
print(code_over50)pepb = pepb_list(over50_list)
print(pepb)list_value = pd.DataFrame()
count = 0
for code in code_over50:try:new_list = year_news_list(code, '20191231')history_list = history(code)VOL = Vol(code)Max_final, Min_final = Max_Min(code)list1 = pd.concat([new_list, history_list, VOL, Max_final], axis=1)list1.index = [count]list_value = pd.concat([list_value, list1])count += 1if count % 10 == 0:print('step:', count)print(list_value)except:count += 1passcontinuelist_value.to_csv('./list_value_2020.csv', encoding='utf-8')
Final_list = pd.concat([pepb, list_value], axis=1)
# Final_list = pd.concat([pepb, new_list, history, VOL, Max_final], axis=1)
# print(Final_list)
#
Final_list.to_csv('./Final_list_2020.csv', encoding='utf-8')
print('all complete')

三、用TabNet训练数据

此次测试运用的是TabNet的Regression做预测。
代码如下:

from pytorch_tabnet.tab_model import TabNetRegressor
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import mean_squared_error
import pandas as pd
import numpy as np
np.random.seed(0)
import osdataset_name = 'stock'# Load data and splittrain = pd.read_csv('./Final_list_2020.csv')target = 'int'if "Set" not in train.columns:train["Set"] = np.random.choice(["train", "valid", "test"], p=[.8, .1, .1], size=(train.shape[0],))train_indices = train[train.Set == "train"].index
valid_indices = train[train.Set == "valid"].index
test_indices = train[train.Set == "test"].index
print(test_indices)
# Simple preprocessingcategorical_columns = []
categorical_dims = {}
for col in train.columns[train.dtypes == object]:print(col, train[col].nunique())l_enc = LabelEncoder()train[col] = train[col].fillna("VV_likely")train[col] = l_enc.fit_transform(train[col].values)categorical_columns.append(col)categorical_dims[col] = len(l_enc.classes_)for col in train.columns[train.dtypes == 'float64']:train.fillna(train.loc[train_indices, col].mean(), inplace=True)# Define categorical features for categorical embeddingsunused_feat = ['Set', 'Max_vol']features = [col for col in train.columns if col not in unused_feat + [target]]cat_idxs = [i for i, f in enumerate(features) if f in categorical_columns]cat_dims = [categorical_dims[f] for i, f in enumerate(features) if f in categorical_columns]# define your embedding sizes : here just a random choice
# cat_emb_dim = [5, 4, 3, 6, 2, 2, 1, 10]# Network parametersclf = TabNetRegressor(cat_dims=cat_dims, cat_emb_dim=1, cat_idxs=cat_idxs)# TrainingX_train = train[features].values[train_indices]
y_train = train[target].values[train_indices].reshape(-1, 1)X_valid = train[features].values[valid_indices]
y_valid = train[target].values[valid_indices].reshape(-1, 1)X_test = train[features].values[test_indices]
print('X_test', X_test, X_test.shape)
y_test = train[target].values[test_indices].reshape(-1, 1)
print('y_test', y_test, y_test.shape)
max_epochs = 100 if not os.getenv("CI", False) else 2# 训练误差:rmsle:均方根对数误差 mae:平均绝对误差 rmse:均方根误差 mse:均方误差
clf.fit(X_train=X_train, y_train=y_train,eval_set=[(X_train, y_train), (X_valid, y_valid)],eval_name=['train', 'valid'],eval_metric=['rmsle', 'mae', 'rmse', 'mse'],max_epochs=max_epochs,patience=10,batch_size=12800, virtual_batch_size=64,num_workers=0,drop_last=False
)# Deprecated : best model is automatically loaded at end of fit
# clf.load_best_model()preds = clf.predict(X_test)y_true = y_testtest_score = mean_squared_error(y_pred=preds, y_true=y_true)print(f"BEST VALID SCORE FOR {dataset_name} : {clf.best_cost}")
print(f"FINAL TEST SCORE FOR {dataset_name} : {test_score}")# Save model and load# save tabnet model
saving_path_name = "./tabnet_model_test_2020"
saved_filepath = clf.save_model(saving_path_name)
print('saved_filepath', saved_filepath)# define new model with basic parameters and load state dict weights
loaded_clf = TabNetRegressor()
loaded_clf.load_model(saved_filepath)loaded_preds = loaded_clf.predict(X_test)
predict_list = pd.DataFrame(loaded_preds)
ture_list = pd.DataFrame(y_test, columns=['int'])
all_list = pd.concat([predict_list, ture_list], axis=1)
all_list.to_csv('./predict_2020.csv') # 将2020年test数据预测值与真实值导入表格中
loaded_test_mse = mean_squared_error(loaded_preds, y_test)print(f"FINAL TEST SCORE FOR {dataset_name} : {loaded_test_mse}")

四、测试数据并进行对比

1.损失函数显示误差

运行结果
这个结果并不能很好的表明预测结果,但系统告诉我们最好的权重是在第35个epoch,所以我们看一看第35个epoch的结果。
epoch 35 | loss: 0.32233 | train_rmsle: 0.09384 | train_mae: 0.40749 | train_rmse: 0.71892 | train_mse: 0.51685 | valid_rmsle: 0.07114 | valid_mae: 0.34773 | valid_rmse: 0.45248 | valid_mse: 0.20474 | 0:00:09s

这里我们关注MAE这个指标:平均绝对误差。该指标是指真实值和预测值的误差平均值。这里预测值valid_mae的值下降到了0.34773,说明预测值和真实值的差距平均大概在±35%以内。也就是说,我们预测当年的最大涨幅的误差大概在±35%,而这个结果就是为什么不能作为参考价值的原因,误差实在是太大了。

2.手动测试计算准确率

因为MAE指标只是显示误差区间,并不能准确的计算我们的投资是否成功,因此我将数据导入csv文件并手动将未参与训练的test部分比较误差。
下面代码是输入测试数据并生成预测值与真实值比较表格:

from pytorch_tabnet.tab_model import TabNetRegressor
from sklearn.metrics import mean_squared_error
import pandas as pd
import numpy as npnp.random.seed(0)dataset_name = "预测误差"
predict = pd.read_csv('Final_predict_test.csv')print(predict)
features = [col for col in predict.columns if col not in ['set', 'int', 'Max_vol']]
X_test = np.array(predict[features])
print(X_test)
y_test = np.array(predict['int']).reshape(-1, 1)
print(y_test)
# define new model with basic parameters and load state dict weightssaving_path_name = "./tabnet_model_test_1.zip"
# saved_filepath = clf.save_model(saving_path_name)loaded_clf = TabNetRegressor()
loaded_clf.load_model(saving_path_name)loaded_preds = loaded_clf.predict(X_test)
print("预测值:", loaded_preds)
loaded_test_mse = mean_squared_error(loaded_preds, y_test)print(f"FINAL TEST SCORE FOR {dataset_name} : {loaded_test_mse}")
predict_list = pd.DataFrame(loaded_preds)
ture_list = predict['int']
all_list = pd.concat([predict_list, ture_list], axis=1)
all_list.to_csv('./predict_all.csv')

这里我一共训练了2017年-2020年四年的数据并生成模型,然后用2020年的test数据作为测试数据生成了预测值与真实值表格:
预测值与真实值对比表格

其中B列为预测值,C列为真实值,D列为比较真实值是否大于预测值。
比较结果
从上图中可以看出,准确率只有57%

如果我们降低一下要求,真实值如果在预测值以下5%也可以接受的话,那么准确性数值勉强可观一些。
降低要求
准确率可以提升到65%了!

六、总结

1.误差分析

我的股票预测误差如此之大是在意料之中的,可以分为以下几点讨论:
(1)股票是人操控的,影响股票走势的因素绝不仅仅与其基本面等等表象数据有关,因此对股票预测的准确率本身就不会达到绝对高的精度。
(2)因为我是金融小白,对股票这方面了解甚少,所以采用的输入特征,也就是股票基本面指标,与股票长线的走势关系不大,也有更多有关联的指标我没有用上。我相信股票的走势和基本面数据是存在关联的,但股票预测准确率的提高需要建立在比较完整的数据架构上。
(3)TabNet模型本身是一个比较完善的模型,其在森林覆盖与扑克手数据集预测上都有较好的准确率。但其内部有较多的参数和超参数,对于不同的模型可能需要修改以缩减收敛速度,增加预测准确率。但因为我的个人实力有限,不能将TabNet的效率和准确率发挥到最大。
(4)数据集的特征并不平均,大部分数据真实值都在0-0.4之间,这导致模型为了减小loss,预测值往往比较中庸。
(5)每年的大盘走势都不同,比如2018年股票大跌,2020年股票大涨,因此在预测2018年时,准确率大大下滑,而预测2020年数据的准确率就会比较客观。

2.未来展望

通过这次简单的测试,能看出股票走势与其基本面存在一定的联系,但要真正提高准确率,不仅需要更完善的人工智能处理框架,最重要的是需要一个较为完整的金融体系框架来分析。
如果有这方面经验和兴趣的,可以和我这只菜鸡一起交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30525.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT文章:C语言开发技巧

------ Oracle中文开发者社区 ------ 如果你想要学习编程,关注本博客,持续获得技术支持,持续获得技术咨询 java开发企业官方账号 Oracle中国官方账号 Java中国管理部 全网粉丝30万 华为云享专家 阿里专家博主 CSDN内容合伙人 CSDN原力计划作者 51CTO专家博主 CSDN博客V账号 …

Azure OpenAI 官方指南 01|GPT-3 的原理揭秘与微调技巧

Azure OpenAI 服务在微软全球 Azure 平台正式发布后,迅速成为众多用户最关心的服务之一。 Azure OpenAI 服务允许用户通过 REST API 访问 OpenAI 的强大语言模型,包括 GPT-3、Codex 和 Embeddings 模型系列。本期,我们将为您揭秘 Azure Open…

集成chatGPT4.0的超强编码软件cursor使用教程

最进在学习上线vue遇到很多问题,发现了这款超级厉害的软件,但没有使用教程,可能是因为刚刚发行的原因吧。今天简单介绍一下。 直接在cursor官网下载压缩包,然后解压,桌面就会有相应的快捷键了,非常方便。 …

观点|安装数据安全“刹车”,释放数据要素产能

一辆没有“刹车”的跑车,你敢开多快? 近年来,人工智能技术的不断迭代与持续演进,离不开算法的突破与算力的提升,更是得益于近几十年来信息化技术应用与发展过程中持续积累的海量数据资产。伴随着数据仓库、数据湖、云服…

下属是个技术大牛,常常加班到晚上10点后,但白天总迟到,HR让他要么降薪,要么离职!...

如果晚上总是加班,白天上班迟到,可以吗? 一位网友求助: 有位同事是技术大牛,常常加班到晚上10后下班,不过非常喜欢迟到,已经连续3个月迟到总数超过公司规定了。人事给出两个条件,要么…

数影周报:TikTok因在线跟踪被罚500万欧,Windows 7退出历史舞台

本周看点:TikTok因在线跟踪被法国罚款500万欧元 ;思科已裁员近700 人;Windows 7退出历史舞台;亚马逊向所有卖家开放Buy with Prime服务;“全路程”完成2亿元C轮融资...... 数据安全那些事 TikTok因在线跟踪被法国罚款5…

游戏直播有什么话术

现在啊,越来越多的游戏推广团队啊,都开始尝试用直播的方式啊去推广游戏,那当然如果你要是通过直播推广的话,那肯定需要主播有一定的话术整理和一定的这个共享能力,一般的主播都会有相关的话术呢,我今天呢&a…

介绍一个视频互动直播后台的开源项目

FFynamic - 扩展FFmpeg的音视频处理库 FFdynamic封装了FFmpeg的底层音视频处理,提供一个将音视频不同组件进行组合的框架,以及在程序运行时可以动态的改变各组件状态的模块。 以下是使用FFdynamic开发的一个互动直播程序,效果如图&#xff…

直播电商开发

作为第一种新的经济形态,直播电商的出现推动了电子商务的快速发展。尤其是2020年,突如其来的疫情直播电成为用户热门购物方式,具有近距离触摸和双向触摸的优势。据统计,随着市长/市场用户的巨大需求,直播电商已经成为一…

直播基本流程

直播基本流程 这里不涉及到业务相关 , 这里简要说明直播流程 推流端: 负责将本地的音视频数据推送至流媒体服务器 流程:音视频数据采集->编码->封装->协议封包 功能:美颜滤镜、音效处理、回音消除 播流端&#xff1a…

实现简单的直播互动功能,直播软件源码是如何做的

近两年,很多电商平台开始关注起直播互动电商,希望在直播中,也可以增加互动,例如在直播过程中,抛出限量优惠商品,实时发送抢购的消息给观众。于是我们做了一个简单的直播软件源码Demo。 Demo大致的整体想法…

直播系统聊天技术(七):直播间海量聊天消息的架构设计难点实践

1、引言 在视频直播场景中,弹幕交互、与主播的聊天、各种业务指令等等,组成了普通用户与主播之间的互动方式。 从技术的角度来看,这些实时互动手段,底层逻辑都是实时聊天消息或指令的分发,技术架构类比于IM应用的话&am…

直播间聊天item图文混排思路

目录 1.版本需求 a.初版本 b.表情包版本 2.思路剖析 a.拼接格式 b.生成格式的操作 c.遍历所有文字,替换图片 d.网络图片的替换逻辑 e.本地图片的替换 f.本地图片快速存储到map g.注意 先上设计图 1.版本需求 a.初版本 一开始,不需要展示聊天…

新媒体运营胡耀文教程:直播间10大话术总结,互动话术不冷场

不知道说什么,不知道怎么说,直播间没人,直播间冷场,这是很多新手主播都会遇到的问题。总结了直播间的10大话术,希望对大家有所帮助。 很多主播,尤其是新人主播,开始和陌生人聊天的时候会感觉到…

《人民日报》申论素材积累

今天我们积累申论素材、必背金句和重点知识。它们来自于一周以来,我们学习的五篇人民日报申论范文,分别是: 1.《传承和弘扬好中华优秀传统文化》(周一) 2.《无限的未来都以现在为渊源》(周二)…

利用telnet SMTP给QQ邮箱发邮件

学习计算机网络自顶向下,SMTP协议 步骤一:开启Windows的telnet客户端 打开“控制面板”中“程序”中的“启用或关闭Windows功能” 勾选“Telnet客户端”开启服务 步骤二:打开cmd 这个大家都会 步骤三:命令 SMTP默认端口号是25…

Telnet 发邮件

使用Telnet给163邮箱发送邮件 首先打开系统的Telnet客户端. 将telnet客户端选上 打开cmd命令窗口 连接163的smtp服务器: telnet smtp.163.com 25 (smtp.163.com是163邮箱的服务器,25是端口号!) 如下表示连接成功! 连接成功后需要如下步骤发送邮件: 1.与服务器打招呼: e…

使用PHPMailer发送outlook邮件

PHPMailer: 在微软账号下设置双重验证: 点击安全选项 点击开启 下一步 点击下一步操作: 选择取消 下一步 完成 这时可以看到应用密码、点击即可看到16位的应用密码

国内主流AI大模型盘点

今年年初,轰动科技圈的大事就是ChatGPT的面世,它的到来打响了AI智能时代的第一枪,同时展开了一场别开生面的智能科技革命。 随着ChatGPT迅速走红,国内各大企业纷纷发力认知大模型领域。经过一段时间的酝酿,国内的AI领域也开启了“…

华为申请注册盘古大模型商标;英伟达 A800 一周涨价超 30%;Apache Tomcat 10.1.11 发布 |极客头条...

「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews) 一分钟速览新闻点&#…