下面是TensorFlow平台下Python实现神经网络的完整攻略:
1. 准备工作
在使用TensorFlow之前需要先安装TensorFlow,可以使用以下命令进行安装:
pip install tensorflow==2.2.0
2. 数据准备
在使用神经网络之前需要准备好数据集,我们可以使用keras自带的数据集进行测试。
以下是使用keras导入mnist数据集的代码:
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
3. 数据预处理
在将数据输入到神经网络之前,需要对数据进行预处理,将像素值转换到[0,1]范围内,然后将数据转换成神经网络所需的张量格式。以下是对数据进行预处理的代码:
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255
4. 构建神经网络
在使用TensorFlow构建神经网络之前,需要先定义模型的架构。
以下是一个简单的神经网络架构:
from keras import models
from keras import layers
network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))
以上代码定义了一个包含两个Dense层的神经网络。第一层有512个神经元,激活函数为relu。第二层是一个10路 softmax 分类器,每个神经元代表一个类别。
5. 编译模型
在训练神经网络之前需要进行编译。以下是对模型进行编译的代码:
network.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
6. 训练模型
数据准备和神经网络架构都完成了,现在可以开始训练神经网络了。以下是训练模型的代码:
network.fit(train_images, train_labels, epochs=5, batch_size=128)
7. 测试模型
在训练模型之后,需要对模型进行测试,以获得其准确率。以下是测试模型的代码:
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)
以上是TensorFlow平台下Python实现神经网络的完整攻略。接下来,给出两个示例:
示例1:使用CIFAR-10训练神经网络
以下是使用CIFAR-10数据集训练神经网络的代码:
from tensorflow.keras.layers import Dense, Flatten, Conv2D
from tensorflow.keras import Model
import tensorflow as tf
# 加载数据集
cifar = tf.keras.datasets.cifar10
(x_train, y_train), (x_test, y_test) = cifar.load_data()
# 数据预处理
x_train, x_test = x_train / 255.0, x_test / 255.0
# 构建模型
class MyModel(Model):
def __init__(self):
super(MyModel, self).__init__()
self.conv1 = Conv2D(32, 3, activation='relu')
self.flatten = Flatten()
self.d1 = Dense(128, activation='relu')
self.d2 = Dense(10)
def call(self, x):
x = self.conv1(x)
x = self.flatten(x)
x = self.d1(x)
return self.d2(x)
model = MyModel()
# 编译模型
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, epochs=5)
# 测试模型
model.evaluate(x_test, y_test, verbose=2)
示例2:使用迁移学习实现图像分类
以下是使用迁移学习实现图像分类的代码:
import tensorflow_hub as hub
import tensorflow_datasets as tfds
# 加载数据集
train, validation = tfds.Split.TRAIN.subsplit([80, 20])
(train_examples, validation_examples), info = tfds.load(
'cats_vs_dogs',
with_info=True,
as_supervised=True,
split=(train, validation),
)
# 数据预处理
num_examples = info.splits['train'].num_examples
IMAGE_RES = 224
def format_image(image, label):
image = tf.image.resize(image, (IMAGE_RES, IMAGE_RES))/255.0
return image, label
BATCH_SIZE = 32
train_batches = train_examples.shuffle(num_examples//4).map(format_image).batch(BATCH_SIZE).prefetch(1)
validation_batches = validation_examples.map(format_image).batch(BATCH_SIZE).prefetch(1)
# 迁移学习模型
URL = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4"
feature_extractor = hub.KerasLayer(URL,
input_shape=(IMAGE_RES, IMAGE_RES, 3))
feature_extractor.trainable = False
model = tf.keras.Sequential([
feature_extractor,
tf.keras.layers.Dense(2, activation='softmax')
])
# 编译模型
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
EPOCHS = 5
history = model.fit(train_batches,
epochs=EPOCHS,
validation_data=validation_batches)
# 测试模型
class_names = ['cat', 'dog']
image_batch, label_batch = next(iter(validation_batches))
image_batch = image_batch.numpy()
label_batch = label_batch.numpy()
predicted_batch = model.predict(image_batch)
predicted_id = np.argmax(predicted_batch, axis=-1)
predicted_label_batch = class_names[predicted_id]
print(predicted_label_batch)
以上就是两个TensorFlow平台下Python实现神经网络的示例,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:TensorFlow平台下Python实现神经网络 - Python技术站