最近はAIの研究をしており、知能解析や自動解析機能をやろうと思っているのですが、近年はディープラーニングが非常に盛んになり、大手企業が続々と参入し、フレームワークを開発したり、論文を発表したりしています。非常に活気がありますが、アプリケーションにはまださまざまなニーズがあり、業界の人々はゆっくりとそれに気付くでしょう.
フレーム選択
繰り返し作業のフレームワークはすでにいくつか実装されているため、深層学習のフレームワークを作成することが不可欠です.独自のニューラル ネットワークを構築し、トレーニング用のデータを準備するだけです。現在、主流のフレームワークには pytorch と tensorflow が含まれます. 中国では、Baidu に paddlepaddle があり、Huawei には mindspore があります. 中国で比較的早く開始されたフレームワークとして、paddle は非常に成熟したエコロジーと API を備えています. ドキュメントは非常に完全であり、 pytorch と tensorflow の利点、動的グラフと静的グラフの組み合わせ、分散トレーニングのサポートを同時にサポートしているため、パドルを選択しました。
例
以下は、パドルで実装した回帰の例です
import paddle
from paddle import nn
import numpy as np
from paddle import to_tensor
import matplotlib.pyplot as plt
from paddle.nn.functional import square_error_cost as sqrc
from visualdl import LogWriter
# 创建 LogWriter 对象,指定 logdir 参数,如果指定路径不存在将会创建一个文件夹
logwriter = LogWriter(logdir='./paddlets_test/reg')
x = np.linspace(0,1,100).astype("float32")
y = np.sin(np.pi*x)+0.3
plt.scatter(x,y)
#增加数据维度,变成N*1的形状,深度学习一般至少是二维数据
x_data = x[:,None]
y_data = y[:,None]
print(x_data.dtype)
print(y_data.dtype)
mynet_Sequential = nn.Sequential(
nn.Linear(1, 32),
nn.Tanh(),
nn.Linear(32, 32),
nn.Tanh(),
nn.Linear(32, 32),
nn.Tanh(),
nn.Linear(32, 10),
nn.Tanh(),
nn.Linear(10, 1),
)
#mynet_Sequential.train()
x_data_train = to_tensor(x_data)
y_data_train = to_tensor(y_data)
loss_func = paddle.nn.loss.MSELoss() #损失函数为均方差
optimizer = paddle.optimizer.SGD(learning_rate=0.01,parameters=mynet_Sequential.parameters())
for pass_id in range(5000):
out = mynet_Sequential(x_data_train)
loss = loss_func(out,y_data_train)
logwriter.add_scalar("train_avg_loss", value=loss.numpy(), step=pass_id)
logwriter.add_histogram("fc_weight", values=mynet_Sequential.parameters()[1].numpy(), step=pass_id)
loss.backward()
optimizer.minimize(loss)
optimizer.step()
optimizer.clear_grad()
if pass_id %1000 == 0:
print("pass:%d, Cost:%.5f" % (pass_id,loss))
paddle.jit.save(mynet_Sequential,"./paddlets_test/model",[paddle.static.InputSpec([-1,1])])
logwriter.add_hparams(hparams_dict={'lr': 0.01, 'batch_size':100,'opt': 'sgd'},
metrics_list=['train_avg_loss','test_avg_loss','test_avg_acc'])
y_test = mynet_Sequential(x_data_train)
y_value = y_test.numpy()
#print(y_value)
y_1d = [item[0] for item in y_value]
plt.plot(x_data,y_1d,color='r')
5000回のトレーニング後、フィッティング効果は悪くないことがわかります。
ログはトレーニング プロセス中に追加されるため、ビジュアル DL を使用して、ネットワーク構造、パラメーター、損失などのトレーニング インジケーターを視覚化することもできます。
損失
ネットワーク構造
パラメータ
一般的に、パドル体験は悪くなく、ツールは完璧で、API は使いやすく、特に技術的な境界 (国境) が明確になり、ローカリゼーションがますます重要になっている現在、興味のある友人は試してみることができます。それ。