从零开始仿写一个抖音App——音视频开篇,移动安全入门

如果想要在 cmake 文件中取出这个键值对则需要使用 ${KEY} 的方式

set (Tutorial_VERSION_MAJOR 1)
set (Tutorial_VERSION_MINOR 0)

这里可以设置一个配置文件,我们可以在 TutorialConfig.h.in 中配置 set() 中设置的键值对

PROJECT_SOURCE_DIR 表示的是源代码的路径

PROJECT_BINARY_DIR 表示的是cmake build 的路径

configure_file (
P R O J E C T S O U R C E D I R / T u t o r i a l C o n f i g . h . i n " " {PROJECT_SOURCE_DIR}/TutorialConfig.h.in" " PROJECTSOURCEDIR/TutorialConfig.h.in""{PROJECT_BINARY_DIR}/TutorialConfig.h”
)

将 cmake 的 build 目录添加到cmake 寻找 include 文件的目录列表中,这样一来 cmake 就能找到前面生成的 TutorialConfig.h 配置文件

include_directories("${PROJECT_BINARY_DIR}")

add_executable(Tutorial_A tutorial.cpp)

// A simple program that computes the square root of a number
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// include 了cmake 生成配置文件
#include “TutorialConfig.h”

int main (int argc, char *argv[]) {
if (argc < 2)
{
fprintf(stdout,"%s Version %d.%d\n",
argv[0],
// 使用了 cmake 生成的配置参数
Tutorial_VERSION_MAJOR,
Tutorial_VERSION_MINOR);
fprintf(stdout,“Usage: %s number\n”,argv[0]);
return 1;
}
double inputValue = atof(argv[1]);
double outputValue = sqrt(inputValue);
fprintf(stdout,“The square root of %g is %g\n”,
inputValue, outputValue);
return 0;
}

// 这个是配置文件,cmake 会根据他在 cmake 的 build 目录生成一个 TutorialConfig.h 文件
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR

(2).添加库的依赖
  • 1.我们进入项目的 two/a/mylib 中会看见三个文件 CMakeLists.txt、mysqrt.cpp、MathFunctions.h 代码如下:
  • 1.声明了一个 library
  • 2.定义了一个计算平方根的函数,然后使用头文件暴露在外面

cmake_minimum_required (VERSION 2.6)

声明了一个 library 名为 MathFunctions,他包含一个可执行文件 mysqrt.cpp

add_library(MathFunctions mysqrt.cpp)

#include “MathFunctions.h”
#include <stdio.h>

// a hack square root calculation using simple operations
double mysqrt(double x) {
if (x <= 0) {
return 0;
}

double result;
double delta;
result = x;

// do ten iterations
int i;
for (i = 0; i < 10; ++i) {
if (result <= 0) {
result = 0.1;
}
delta = x - (result * result);
result = result + 0.5 * delta / result;
fprintf(stdout, “Computing sqrt of %g to be %g\n”, x, result);
}
return result;
}

//
// Create

  • 14
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我可以为您提供一个简单的 Python GPT 模型实现。以下是一个基于 TensorFlow 的 GPT-2 模型的简单实现。让我们开始吧! 首先,我们需要安装 TensorFlow 和其他必要的库: ```python !pip install tensorflow !pip install keras !pip install numpy ``` 接下来,我们需要导入所需的库: ```python import tensorflow as tf import numpy as np from keras.layers import Input, Embedding, Dense, LSTM, Lambda, Flatten from keras.models import Model from keras.optimizers import Adam from keras.preprocessing.sequence import pad_sequences from keras.utils import to_categorical ``` 然后,我们需要定义一些模型的超参数: ```python MAX_SEQ_LENGTH = 100 MAX_VOCAB_SIZE = 3000 EMBEDDING_DIM = 50 HIDDEN_DIM = 50 NUM_LAYERS = 2 BATCH_SIZE = 32 EPOCHS = 1000 LEARNING_RATE = 0.0001 ``` 现在,我们可以定义我们的 GPT 模型。我们将使用 LSTM 作为我们的 RNN 层,因为它比 GRU 更加常用。 ```python # 定义输入层 input = Input(shape=(MAX_SEQ_LENGTH,)) # 定义嵌入层 embedding = Embedding(input_dim=MAX_VOCAB_SIZE, output_dim=EMBEDDING_DIM, input_length=MAX_SEQ_LENGTH)(input) # 定义 LSTM 层 lstm = LSTM(units=HIDDEN_DIM, return_sequences=True)(embedding) # 定义输出层 output = TimeDistributed(Dense(units=MAX_VOCAB_SIZE, activation='softmax'))(lstm) # 定义模型 model = Model(inputs=input, outputs=output) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=LEARNING_RATE), metrics=['accuracy']) ``` 接下来,我们需要读入我们的数据集。在这里,我们将使用一个简单的文本文件作为我们的数据集。 ```python # 读取文本文件 with open('data.txt', 'r') as f: text = f.read() # 将文本转换成小写 text = text.lower() # 创建字符到索引的映射 char_to_idx = { ch:i+1 for i,ch in enumerate(sorted(set(text))) } # 创建索引到字符的映射 idx_to_char = { i+1:ch for i,ch in enumerate(sorted(set(text))) } # 将文本转换成索引序列 idxs = [char_to_idx[ch] for ch in text] # 计算文本序列的长度 num_chars = len(idxs) ``` 接下来,我们需要创建我们的输入和目标序列。在这里,我们将使用一个滑动窗口来创建我们的输入和目标序列,其中每个输入序列的长度为 MAX_SEQ_LENGTH。 ```python # 创建输入序列和目标序列 input_seq = [] target_seq = [] for i in range(0, num_chars - MAX_SEQ_LENGTH, MAX_SEQ_LENGTH): input_seq.append(idxs[i:i+MAX_SEQ_LENGTH]) target_seq.append(idxs[i+1:i+MAX_SEQ_LENGTH+1]) # 将输入序列和目标序列转换为 numpy 数组 input_seq = np.array(input_seq) target_seq = np.array(target_seq) # 将目标序列进行 one-hot 编码 target_seq = to_categorical(target_seq, num_classes=MAX_VOCAB_SIZE) ``` 现在,我们可以训练我们的 GPT 模型: ```python # 训练模型 model.fit(input_seq, target_seq, batch_size=BATCH_SIZE, epochs=EPOCHS, verbose=1) ``` 最后,我们可以使用我们的模型来生成新的文本: ```python # 生成新的文本 def generate_text(model, seed_text, num_chars): # 将种子文本转换为索引序列 seed_idx = [char_to_idx[ch] for ch in seed_text] # 循环生成新的文本 for i in range(num_chars): # 将种子文本进行填充 padded_seed = pad_sequences([seed_idx], maxlen=MAX_SEQ_LENGTH, padding='post') # 预测下一个字符的概率分布 probs = model.predict(padded_seed)[0, -1, :] # 从概率分布中采样下一个字符 next_idx = np.random.choice(len(probs), p=probs) # 将下一个字符添加到生成的文本中 seed_idx.append(next_idx) # 将索引序列转换为文本 generated_text = ''.join([idx_to_char[idx] for idx in seed_idx]) return generated_text # 生成新的文本 generated_text = generate_text(model, 'hello world', 1000) # 打印生成的文本 print(generated_text) ``` 这就是一个简单的 Python GPT 模型的实现。当然,这只是一个基于 LSTM 的简单实现,与 GPT-2 模型相比,还有很大的改进空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值