发布时间:2025-07-18
点击次数: 《Going deeper with Image Transformers》针对图像Transformer优化少的问题,研究构建和优化更深网络。提出LayerScale,在残差块输出乘对角线矩阵,改善训练动态以训练更深模型;设计类别注意力层,分离patch自注意与信息总结。所建CaiT模型在图像分类任务中表现出色。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

(公式 1)
其中 η 代表 LayerNorm


其中
和
为可学习参数
![]()
PHP MySQL WEB开发圣经中文版 (原书第三版)
本书将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几个经典且实用的例子。 本书是第3版,经过了全面的更新、重写以及扩展,包括PHP5的最新特性——新的对象模型、更好的异常处理和SimpleXML;以及MySQL 5的新特性,例如存储过程和存储引擎。 PHP
566 查看详情
![]()
ε 为对角线值的初始化值,一般为一个较小的数,作者设置为 ε=0.1 当深度小于等于 18 时,ε=10−5 当深度小于等于 24 时,和 ε=10−6 当深度大于 24 时
η 代表 LayerNorm
class LayerScale_Block(nn.Layer):
# with slight modifications to add layerScale
def __init__(self, dim, num_heads, mlp_ratio=4., qkv_bias=False, qk_scale=None, drop=0., attn_drop=0.,
drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm, epsilon=1e-6,
Attention_block=Attention_talking_head, Mlp_block=Mlp, init_values=1e-4):
super().__init__()
self.norm1 = norm_layer(dim, epsilon=epsilon)
self.attn = Attention_block(
dim,
num_heads=num_heads,
qkv_bias=qkv_bias,
qk_scale=qk_scale,
attn_drop=attn_drop,
proj_drop=drop
)
self.drop_path = DropPath(drop_path) if drop_path > 0. else Identity()
self.norm2 = norm_layer(dim, epsilon=epsilon)
mlp_hidden_dim = int(dim * mlp_ratio)
self.mlp = Mlp_block(
in_features=dim,
hidden_features=mlp_hidden_dim,
act_layer=act_layer,
drop=drop
) # 创建 LayerScale 的两个可学习参数
# 使用 init_values 初始化这两个参数
self.gamma_1 = add_parameter(self, init_values * paddle.ones((dim,)))
self.gamma_2 = add_parameter(self, init_values * paddle.ones((dim,))) def forward(self, x):
x = x + self.drop_path(self.gamma_1 * self.attn(self.norm1(x)))
x = x + self.drop_path(self.gamma_2 * self.mlp(self.norm2(x))) return x

# Class Attention class Class_Attention(nn.Layer):
# with slight modifications to do CA
def __init__(self, dim, num_heads=8, qkv_bias=False,
qk_scale=None, attn_drop=0., proj_drop=0.):
super().__init__()
self.num_heads = num_heads
head_dim = dim // num_heads
self.scale = qk_scale or head_dim ** -0.5
self.q = nn.Linear(dim, dim, bias_attr=qkv_bias)
self.k = nn.Linear(dim, dim, bias_attr=qkv_bias)
self.v = nn.Linear(dim, dim, bias_attr=qkv_bias)
self.attn_drop = nn.Dropout(attn_drop)
self.proj = nn.Linear(dim, dim)
self.proj_drop = nn.Dropout(proj_drop) def forward(self, x):
# 输入是 [cls token, x]
# 输出是计算 attention 之后的 cls token
# 在多层堆叠的时候后面的 x 一直是不变的
B, N, C = x.shape
# query 只取 cls token
q = self.q(x[:, 0]).unsqueeze(1).reshape(
(B, 1, self.num_heads, C // self.num_heads)
).transpose((0, 2, 1, 3))
k = self.k(x).reshape(
(B, N, self.num_heads, C // self.num_heads)
).transpose((0, 2, 1, 3))
q = q * self.scale
v = self.v(x).reshape(
(B, N, self.num_heads, C // self.num_heads)
).transpose((0, 2, 1, 3))
attn = q.matmul(k.transpose((0, 1, 3, 2)))
attn = nn.functional.softmax(attn, axis=-1)
attn = self.attn_drop(attn)
x_cls = (attn.matmul(v)).transpose((0, 2, 1, 3)).reshape((B, 1, C))
x_cls = self.proj(x_cls)
x_cls = self.proj_drop(x_cls) return x_cls# 结合 LayerScale 和 Class Attentionclass LayerScale_Block_CA(nn.Layer):
# with slight modifications to add CA and LayerScale
def __init__(self, dim, num_heads, mlp_ratio=4., qkv_bias=False, qk_scale=None, drop=0., attn_drop=0.,
drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm, epsilon=1e-6,
Attention_block=Class_Attention, Mlp_block=Mlp, init_values=1e-4):
super().__init__()
self.norm1 = norm_layer(dim, epsilon=epsilon)
self.attn = Attention_block(
dim,
num_heads=num_heads,
qkv_bias=qkv_bias,
qk_scale=qk_scale,
attn_drop=attn_drop,
proj_drop=drop
)
self.drop_path = DropPath(drop_path) if drop_path > 0. else Identity()
self.norm2 = norm_layer(dim, epsilon=epsilon)
mlp_hidden_dim = int(dim * mlp_ratio)
self.mlp = Mlp_block(
in_features=dim,
hidden_features=mlp_hidden_dim,
act_layer=act_layer,
drop=drop
)
self.gamma_1 = add_parameter(self, init_values * paddle.ones((dim,)))
self.gamma_2 = add_parameter(self, init_values * paddle.ones((dim,))) def forward(self, x, x_cls):
# 拼接 cls token 和 输入
u = paddle.concat((x_cls, x), axis=1)
# Class Attention + FFN
x_cls = x_cls + self.drop_path(self.gamma_1 * self.attn(self.norm1(u)))
x_cls = x_cls + self.drop_path(self.gamma_2 * self.mlp(self.norm2(x_cls))) return x_cls
import paddleimport paddle.nn as nnfrom common import add_parameterfrom common import trunc_normal_, zeros_, ones_from common import DropPath, Identity, Mlp, PatchEmbedclass Class_Attention(nn.Layer):
# with slight modifications to do CA
def __init__(self, dim, num_heads=8, qkv_bias=False,
qk_scale=None, attn_drop=0., proj_drop=0.):
super().__init__()
self.num_heads = num_heads
head_dim = dim // num_heads
self.scale = qk_scale or head_dim ** -0.5
self.q = nn.Linear(dim, dim, bias_attr=qkv_bias)
self.k = nn.Linear(dim, dim, bias_attr=qkv_bias)
self.v = nn.Linear(dim, dim, bias_attr=qkv_bias)
self.attn_drop = nn.Dropout(attn_drop)
self.proj = nn.Linear(dim, dim)
self.proj_drop = nn.Dropout(proj_drop) def forward(self, x):
B, N, C = x.shape
q = self.q(x[:, 0]).unsqueeze(1).reshape(
(B, 1, self.num_heads, C // self.num_heads)
).transpose((0, 2, 1, 3))
k = self.k(x).reshape(
(B, N, self.num_heads, C // self.num_heads)
).transpose((0, 2, 1, 3))
q = q * self.scale
v = self.v(x).reshape(
(B, N, self.num_heads, C // self.num_heads)
).transpose((0, 2, 1, 3))
attn = q.matmul(k.transpose((0, 1, 3, 2)))
attn = nn.functional.softmax(attn, axis=-1)
attn = self.attn_drop(attn)
x_cls = (attn.matmul(v)).transpose((0, 2, 1, 3)).reshape((B, 1, C))
x_cls = self.proj(x_cls)
x_cls = self.proj_drop(x_cls) return x_clsclass LayerScale_Block_CA(nn.Layer):
# with slight modifications to add CA and LayerScale
def __init__(self, dim, num_heads, mlp_ratio=4., qkv_bias=False, qk_scale=None, drop=0., attn_drop=0.,
drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm, epsilon=1e-6,
Attention_block=Class_Attention, Mlp_block=Mlp, init_values=1e-4):
super().__init__()
self.norm1 = norm_layer(dim, epsilon=epsilon)
self.attn = Attention_block(
dim,
num_heads=num_heads,
qkv_bias=qkv_bias,
qk_scale=qk_scale,
attn_drop=attn_drop,
proj_drop=drop
)
self.drop_path = DropPath(drop_path) if drop_path > 0. else Identity()
self.norm2 = norm_layer(dim, epsilon=epsilon)
mlp_hidden_dim = int(dim * mlp_ratio)
self.mlp = Mlp_block(
in_features=dim,
hidden_features=mlp_hidden_dim,
act_layer=act_layer,
drop=drop
)
self.gamma_1 = add_parameter(self, init_values * paddle.ones((dim,)))
self.gamma_2 = add_parameter(self, init_values * paddle.ones((dim,))) def forward(self, x, x_cls):
u = paddle.concat((x_cls, x), axis=1)
x_cls = x_cls + self.drop_path(self.gamma_1 * self.attn(self.norm1(u)))
x_cls = x_cls + self.drop_path(self.gamma_2 * self.mlp(self.norm2(x_cls))) return x_clsclass Attention_talking_head(nn.Layer):
# with slight modifications to add Talking Heads Attention (https://arxiv.org/pdf/2003.02436v1.pdf)
def __init__(self, dim, num_heads=8, qkv_bias=False,
qk_scale=None, attn_drop=0., proj_drop=0.):
super().__init__()
self.num_heads = num_heads
head_dim = dim // num_heads
self.scale = qk_scale or head_dim ** -0.5
self.qkv = nn.Linear(dim, dim * 3, bias_attr=qkv_bias)
self.attn_drop = nn.Dropout(attn_drop)
self.proj = nn.Linear(dim, dim)
self.proj_l = nn.Linear(num_heads, num_heads)
self.proj_w = nn.Linear(num_heads, num_heads)
self.proj_drop = nn.Dropout(proj_drop) def forward(self, x):
B, N, C = x.shape
qkv = self.qkv(x).reshape(
(B, N, 3, self.num_heads, C // self.num_heads)
).transpose((2, 0, 3, 1, 4))
q, k, v = qkv[0] * self.scale, qkv[1], qkv[2]
attn = (q.matmul(k.transpose((0, 1, 3, 2))))
attn = self.proj_l(attn.transpose((0, 2, 3, 1))).transpose((0, 3, 1, 2))
attn = nn.functional.softmax(attn, axis=-1)
attn = self.proj_w(attn.transpose((0, 2, 3, 1))).transpose((0, 3, 1, 2))
attn = self.attn_drop(attn)
x = (attn.matmul(v)).transpose((0, 2, 1, 3)).reshape((B, N, C))
x = self.proj(x)
x = self.proj_drop(x) return xclass LayerScale_Block(nn.Layer):
# with slight modifications to add layerScale
def __init__(self, dim, num_heads, mlp_ratio=4., qkv_bias=False, qk_scale=None, drop=0., attn_drop=0.,
drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm, epsilon=1e-6,
Attention_block=Attention_talking_head, Mlp_block=Mlp, init_values=1e-4):
super().__init__()
self.norm1 = norm_layer(dim, epsilon=epsilon)
self.attn = Attention_block(
dim,
num_heads=num_heads,
qkv_bias=qkv_bias,
qk_scale=qk_scale,
attn_drop=attn_drop,
proj_drop=drop
)
self.drop_path = DropPath(drop_path) if drop_path > 0. else Identity()
self.norm2 = norm_layer(dim, epsilon=epsilon)
mlp_hidden_dim = int(dim * mlp_ratio)
self.mlp = Mlp_block(
in_features=dim,
hidden_features=mlp_hidden_dim,
act_layer=act_layer,
drop=drop
)
self.gamma_1 = add_parameter(self, init_values * paddle.ones((dim,)))
self.gamma_2 = add_parameter(self, init_values * paddle.ones((dim,))) def forward(self, x):
x = x + self.drop_path(self.gamma_1 * self.attn(self.norm1(x)))
x = x + self.drop_path(self.gamma_2 * self.mlp(self.norm2(x))) return xclass CaiT(nn.Layer):
# with slight modifications to adapt to our cait models
def __init__(self, img_size=224, patch_size=16, in_chans=3, embed_dim=768, depth=12,
num_heads=12, mlp_ratio=4, qkv_bias=True, qk_scale=None, drop_rate=0.,
attn_drop_rate=0., drop_path_rate=0., norm_layer=nn.LayerNorm, epsilon=1e-6,
block_layers=LayerScale_Block, block_layers_token=LayerScale_Block_CA,
Patch_layer=PatchEmbed, act_layer=nn.GELU, Attention_block=Attention_talking_head,
Mlp_block=Mlp, init_scale=1e-4, Attention_block_token_only=Class_Attention,
Mlp_block_token_only=Mlp, depth_token_only=2, mlp_ratio_clstk=4.0, class_dim=1000):
super().__init__()
self.class_dim = class_dim
self.num_features = self.embed_dim = embed_dim
self.patch_embed = Patch_layer(
img_size=img_size,
patch_size=patch_size,
in_chans=in_chans,
embed_dim=embed_dim
)
num_patches = self.patch_embed.num_patches
self.cls_token = add_parameter(self, paddle.zeros((1, 1, embed_dim)))
self.pos_embed = add_parameter(self, paddle.zeros((1, num_patches, embed_dim)))
self.pos_drop = nn.Dropout(p=drop_rate)
dpr = [drop_path_rate for i in range(depth)]
self.blocks = nn.LayerList([
block_layers(
dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio, qkv_bias=qkv_bias, qk_scale=qk_scale,
drop=drop_rate, attn_drop=attn_drop_rate, drop_path=dpr[i], norm_layer=norm_layer, epsilon=epsilon,
act_layer=act_layer, Attention_block=Attention_block, Mlp_block=Mlp_block, init_values=init_scale
) for i in range(depth)
])
self.blocks_token_only = nn.LayerList([
block_layers_token(
dim=embed_dim, num_heads=num_heads, mlp_ratio=mlp_ratio_clstk, qkv_bias=qkv_bias, qk_scale=qk_scale,
drop=0.0, attn_drop=0.0, drop_path=0.0, norm_layer=norm_layer, epsilon=epsilon, act_layer=act_layer,
Attention_block=Attention_block_token_only, Mlp_block=Mlp_block_token_only, init_values=init_scale
) for i in range(depth_token_only)
])
self.norm = norm_layer(embed_dim, epsilon=epsilon) # Classifier head
if class_dim > 0:
self.head = nn.Linear(embed_dim, class_dim)
trunc_normal_(self.pos_embed)
trunc_normal_(self.cls_token)
self.apply(self._init_weights) def _init_weights(self, m):
if isinstance(m, nn.Linear):
trunc_normal_(m.weight) if isinstance(m, nn.Linear) and m.bias is not None:
zeros_(m.bias) elif isinstance(m, nn.LayerNorm):
zeros_(m.bias)
ones_(m.weight) def forward_features(self, x):
B = x.shape[0]
x = self.patch_embed(x)
cls_tokens = self.cls_token.expand((B, -1, -1))
x = x + self.pos_embed
x = self.pos_drop(x) for i, blk in enumerate(self.blocks):
x = blk(x) for i, blk in enumerate(self.blocks_token_only):
cls_tokens = blk(x, cls_tokens)
x = paddle.concat((cls_tokens, x), axis=1)
x = self.norm(x) return x[:, 0] def forward(self, x):
x = self.forward_features(x) if self.class_dim > 0:
x = self.head(x) return x/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/layers/utils.py:26: DeprecationWarning: `np.int` is a deprecated alias for the builtin `int`. To silence this warning, use `int` by itself. Doing this will not modify any beh*ior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information. Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations def convert_to_list(value, n, name, dtype=np.int):
def cait_xxs_24(pretrained=False, **kwargs):
model = CaiT(
img_size=224, embed_dim=192, depth=24,
num_heads=4, init_scale=1e-5, **kwargs) if pretrained:
params = paddle.load('data/data82724/CaiT_XXS24_224.pdparams')
model.set_dict(params) return modeldef cait_xxs_36(pretrained=False, **kwargs):
model = CaiT(
img_size=224, embed_dim=192, depth=36,
num_heads=4, init_scale=1e-5, **kwargs) if pretrained:
params = paddle.load('data/data82724/CaiT_XXS36_224.pdparams')
model.set_dict(params)
return modeldef cait_s_24(pretrained=False, **kwargs):
model = CaiT(
img_size=224, embed_dim=384, depth=24,
num_heads=8, init_scale=1e-5, **kwargs) if pretrained:
params = paddle.load('data/data82724/CaiT_S24_224.pdparams')
model.set_dict(params)
return modeldef cait_xxs_24_384(pretrained=False, **kwargs):
model = CaiT(
img_size=384, embed_dim=192, depth=24,
num_heads=4, init_scale=1e-5, **kwargs) if pretrained:
params = paddle.load('data/data82724/CaiT_XXS24_384.pdparams')
model.set_dict(params)
return modeldef cait_xxs_36_384(pretrained=False, **kwargs):
model = CaiT(
img_size=384, embed_dim=192, depth=36,
num_heads=4, init_scale=1e-5, **kwargs) if pretrained:
params = paddle.load('data/data82724/CaiT_XXS36_384.pdparams')
model.set_dict(params)
return modeldef cait_xs_24_384(pretrained=False, **kwargs):
model = CaiT(
img_size=384, embed_dim=288, depth=24,
num_heads=6, init_scale=1e-5, **kwargs) if pretrained:
params = paddle.load('data/data82724/CaiT_XS24_384.pdparams')
model.set_dict(params)
return modeldef cait_s_24_384(pretrained=False, **kwargs):
model = CaiT(
img_size=384, embed_dim=384, depth=24,
num_heads=8, init_scale=1e-5, **kwargs) if pretrained:
params = paddle.load('data/data82724/CaiT_S24_384.pdparams')
model.set_dict(params)
return modeldef cait_s_36_384(pretrained=False, **kwargs):
model = CaiT(
img_size=384, embed_dim=384, depth=36,
num_heads=8, init_scale=1e-6, **kwargs) if pretrained:
params = paddle.load('data/data82724/CaiT_S36_384.pdparams')
model.set_dict(params)
return modeldef cait_m_36_384(pretrained=False, **kwargs):
model = CaiT(
img_size=384, embed_dim=768, depth=36,
num_heads=16, init_scale=1e-6, **kwargs) if pretrained:
params = paddle.load('data/data82724/CaiT_M36_384.pdparams')
model.set_dict(params)
return modeldef cait_m_48_448(pretrained=False, **kwargs):
model = CaiT(
img_size=448, embed_dim=768, depth=48,
num_heads=16, init_scale=1e-6, **kwargs) if pretrained:
params = paddle.load('data/data82724/CaiT_M48_448.pdparams')
model.set_dict(params)
return model
model = cait_xxs_24(True) random_input = paddle.randn((1, 3, 224, 224)) out = model(random_input)print(out.shape) model.eval() out = model(random_input)print(out.shape)
[1, 1000] [1, 1000]

!mkdir ~/data/ILSVRC2012 !tar -xf ~/data/data68594/ILSVRC2012_img_val.tar -C ~/data/ILSVRC2012
import osimport cv2import numpy as npimport paddleimport paddle.vision.transforms as Tfrom PIL import Image# 构建数据集class ILSVRC2012(paddle.io.Dataset):
def __init__(self, root, label_list, transform, backend='pil'):
self.transform = transform
self.root = root
self.label_list = label_list
self.backend = backend
self.load_datas() def load_datas(self):
self.imgs = []
self.labels = [] with open(self.label_list, 'r') as f: for line in f:
img, label = line[:-1].split(' ')
self.imgs.append(os.path.join(self.root, img))
self.labels.append(int(label)) def __getitem__(self, idx):
label = self.labels[idx]
image = self.imgs[idx] if self.backend=='cv2':
image = cv2.imread(image) else:
image = Image.open(image).convert('RGB')
image = self.transform(image) return image.astype('float32'), np.array(label).astype('int64') def __len__(self):
return len(self.imgs)
val_transforms = T.Compose([
T.Resize(448, interpolation='bicubic'),
T.CenterCrop(448),
T.ToTensor(),
T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])# 配置模型model = cait_m_48_448(pretrained=True)
model = paddle.Model(model)
model.prepare(metrics=paddle.metric.Accuracy(topk=(1, 5)))# 配置数据集val_dataset = ILSVRC2012('data/ILSVRC2012', transform=val_transforms, label_list='data/data68594/val_list.txt', backend='pil')# 模型验证acc = model.evaluate(val_dataset, batch_size=64, num_workers=0, verbose=1)print(acc){'acc_top1': 0.86492, 'acc_top5': 0.97752}
以上就是Paddle2.0:浅析并实现 CaiT 模型的详细内容,更多请关注其它相关文章!
# facebook
# 所示
# 相互作用
# 这两个
# 本书
# 原书
# 第三版
# 中文网
# type
# talk
# ai
# python
# 一言
# 佛山陵县网站建设
# 唐山昌吉网站建设
# 快手刷赞网站推广微信
# 双品牌广告视频网站推广
# 孟村网站推广公司
# 贺州公司网站建设项目
# 中国香港专业网站建设
# 商业营销圈层推广方案模板
# 昭通优化网站
# 兰州哪个网站可以推广
# 形式上
# 官网
相关栏目:
【
行业新闻62819 】
【
科技资讯67470 】
相关推荐:
杀入生成式AI的亚马逊云科技,能否再次生成未来?
AYANEO AIR 1S 掌机 7 月 9 日发布:R7 7840U + OLED 屏
微软 GitHub Copilot 编程助手被投诉:换口吻改写公共代码来躲版权
Bing 聊天机器人现支持在桌面端用语音提问
腾讯自主研发机器狗 Max 升级,可“奔跑跳跃”完成避障动作
AI行业盛会大咖云集!Sam Altam、“AI教父”......一文看懂最新观点
亚马逊确认今年不会举办 re:MARS 机器人和人工智能大会
马斯克WAIC2025演讲全文:AI将对人类文明产生深远影响
美图发布国内首个“懂美学的”AI视觉大模型MiracleVision
人工智能快速发展 打开就业新空间
百亿量化私募:量化投资进入“精耕细作”时代 AI带来行业新变革
国产医疗企业的人工智能
当科幻走进现实 脑机接口新技术能为生活带来哪些惊喜?
昇思开源社区理事会成立,基于昇思AI框架的全模态大模型“紫东.太初2.0”发布
VR健身应用《FitXR》将取消Quest 1端会员服务
AI绘画,还需要懂数学?
第 66 届格莱美奖规定,AI 作品将无法获得评奖资格
苹果机器学习关键人物 Ali Farhadi 离职,回归 AI2 担任 CEO
中科院自研新一代 AI 大模型“紫东太初 2.0”问世
华为AI大模型将融入HarmonyOS 4
三个全球首创,青岛西海岸新区“海元宇宙”亮相世界人工智能大会
Meta推出VR订阅服务Quest +:每月免费玩两款游戏,7.99美元/月
微软大牛加入ZOOM,AI人才大战打响
华为推出全新操作系统HarmonyOS 4,AI和新引擎完美融合
周星驰支持的人工智能与 Web3 初创公司 Moonbox 完成 100 万美元融资
央广车联网亮相2025世界人工智能大会
美图影像节演讲实录:191次提及AI,发布7款影像生产力工具
成都大运会闭幕式引入人形机器人展示表演
郭帆导演成功利用AI技术制作的《流浪地球3》预告片在央视热播,引发巨大反响
Spotify计划推出AI驱动的音乐播放器功能
软银、淡马锡、沙特阿美突击入股,“协作机器人第一股”节卡股份:强敌环伺,持续失血是常态
马斯克回应“人工智能让一切变得更好”:我们已经是半机器人了
改动一行代码,PyTorch训练三倍提速,这些「高级技术」是关键
Adobe旗下Illustrator引入生成式AI工具Firefly
百度文心一言App上架苹果商店,人工智能创作引发热议
前特斯拉总监、OpenAI大牛Karpathy:我被自动驾驶分了心,AI智能体才是未来!
中国联通发布图文AI大模型,可实现以文生图、视频剪辑
普林斯顿Infinigen矩阵开启!AI造物主100%创造大自然,逼真到炸裂
周鸿祎参加中美青年科技创新峰会,分享人工智能创新机遇
技术如何使人变得懒惰?
读创正式上线“读创AI聊”功能
「模仿学习」只会套话?解释微调+130亿参数Orca:推理能力打平ChatGPT
猿辅导发布最新SaaS业务进展公告:Motiff UI设计工具推出三项新的AI功能
学而思网校推出首个基于自研大模型的《人工智能第一课》
人工智能“Aria”现身 Opera浏览器100版本更新:新功能“标签岛”
重塑未来生活的五项技术趋势
OpenAI 向所有付费 API 用户开放 GPT-4
阿里云全面支持Llama2训练部署,助力企业快速构建自有大型模型
谷歌推出 SAIF 框架,倡导安全环境下探索和发展人工智能
喜马拉雅在国际会议挑战赛中突破语音重叠难题斩获第一 加速AI创新