编程实现神经网络的最佳框架是什么?TensorFlow还是PyTorch?我的回答是:别担心,你从哪一个入门,你选择哪一个并不重要,重要的是自己动手实践!下面我们开始吧!
这两种框架都提供了编程神经网络常用的机器学习步骤:
导入所需的库加载并预处理数据定义模型定义优化器和损失函数训练模型评估模型这些步骤可以在任何一个框架中找到非常类似的实现(即使是像MindSpore这样的框架)。为此,在本文中,我们将构建一个神经网络模型,分别在PyTorchAPI与TensorFlowKerasAPI下进行手写数字分类任务的实现。你可以在我的GitHub上找到对应的代码实现,并且用colabgooglenotebook来运行。
1.神经网络编程步骤
a)导入必要的库
在这两个框架中,我们需要首先导入一些Python库并定义一些我们将需要训练的超参数:
importnumpyasnpimportmatplotlib.pyplotaspltepochs=10batch_size=64
对于TensorFlow,您仅需要额外导入以下库:
importtensorflowastf
而对于PyTorch,您还需要导入这两个库:
importtorchimporttorchvision
b)导入并预处理数据
使用TensorFlow加载和准备数据可以使用以下两行代码:
(x_trainTF_,y_trainTF_),_=tf.keras.datasets.mnist.load_data()x_trainTF=x_trainTF_.reshape(,).astype(float32)/y_trainTF=tf.keras.utils.to_categorical(y_trainTF_,num_classes=10)
而在PyTorch则是这两行代码:
xy_trainPT=torchvision.datasets.MNIST(root=./data,train=True,download=True,transform=torchvision.transforms.Compose([torchvision.transforms.ToTensor()]))xy_trainPT_loader=torch.utils.data.DataLoader(xy_trainPT,batch_size=batch_size)
我们可以通过matplotlib.pyplot库验证这两个代码是否加载了相同的数据:
print(TensorFlow:)fig=plt.figure(figsize=(25,4))foridxinnp.arange(20):ax=fig.add_subplot(2,20/2,idx+1,xticks=[],yticks=[])ax.imshow(x_trainTF_[idx],cmap=plt.cm.binary)ax.set_title(str(y_trainTF_[idx]))
print(PyTorch:)fig=plt.figure(figsize=(25,4))foridxinnp.arange(20):ax=fig.add_subplot(2,20/2,idx+1,xticks=[],yticks=[])ax.imshow(torch.squeeze(image,dim=0).numpy(),cmap=plt.cm.binary)image,label=xy_trainPT[idx]ax.set_title(str(label))
c)定义模型
在定义模型的时候,这两种框架都使用相当相似的语法来完成。对于TensorFlow,可以使用以下代码来完成:
modelTF=tf.keras.Sequential([tf.keras.layers.Dense(10,activation=sigmoid,input_shape=(,)),tf.keras.layers.Dense(10,activation=softmax)])
在PyTorch下则这么完成:
modelPT=torch.nn.Sequential(torch.nn.Linear(,10),torch.nn.Sigmoid(),torch.nn.Linear(10,10),torch.nn.LogSoftmax(dim=1))
d)定义优化器与损失函数
同样,指定优化器和loss函数的方法在两个框架下也是很相似的。在TensorFlow下,我们可以这样做:
modelTF.