首页 > 其他分享 >TensorFlow08 神经网络-keras实战

TensorFlow08 神经网络-keras实战

时间:2023-06-20 12:34:24浏览次数:52  
标签:network val keras 32 self db TensorFlow08 神经网络 tf

1 数据集:

image
这个照片很模糊,大小只有[32,32],所以我们预测的结果也不是很好。

2 自定义网络层(My Dense layer)

原本的网络层:w@x+b
image
然后我们自己定义了一个,特意的把+b去掉了。
image

3 数据加载

import  os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

import tensorflow as tf
from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics
from tensorflow import keras


def preprocess(x, y):
    # [0~255] => [-1~1]
    x = 2 * tf.cast(x, dtype=tf.float32) / 255. - 1.
    y = tf.cast(y, dtype=tf.int32)
    return x,y


batchsz = 128
# [50k, 32, 32, 3], [10k, 1]
(x, y), (x_val, y_val) = datasets.cifar10.load_data()
y = tf.squeeze(y)
y_val = tf.squeeze(y_val)
y = tf.one_hot(y, depth=10) # [50k, 10]
y_val = tf.one_hot(y_val, depth=10) # [10k, 10]
print('datasets:', x.shape, y.shape, x_val.shape, y_val.shape, x.min(), x.max())


train_db = tf.data.Dataset.from_tensor_slices((x,y))
train_db = train_db.map(preprocess).shuffle(10000).batch(batchsz)
test_db = tf.data.Dataset.from_tensor_slices((x_val, y_val))
test_db = test_db.map(preprocess).batch(batchsz)


sample = next(iter(train_db))
print('batch:', sample[0].shape, sample[1].shape)

首先说一下这里,这里把他归一化成[0,1]也行,但是归一化成[-1,1]会更好一点。

4 自定义神经网络

class MyDense(layers.Layer):
    # to replace standard layers.Dense()
    def __init__(self, inp_dim, outp_dim):
        super(MyDense, self).__init__()

        self.kernel = self.add_variable('w', [inp_dim, outp_dim])
        # self.bias = self.add_variable('b', [outp_dim])

    def call(self, inputs, training=None):

        x = inputs @ self.kernel
        return x

class MyNetwork(keras.Model):

    def __init__(self):
        super(MyNetwork, self).__init__()

        self.fc1 = MyDense(32*32*3, 256)
        self.fc2 = MyDense(256, 128)
        self.fc3 = MyDense(128, 64)
        self.fc4 = MyDense(64, 32)
        self.fc5 = MyDense(32, 10)



    def call(self, inputs, training=None):
        """

        :param inputs: [b, 32, 32, 3]
        :param training:
        :return:
        """
        x = tf.reshape(inputs, [-1, 32*32*3])
        # [b, 32*32*3] => [b, 256]
        x = self.fc1(x)
        x = tf.nn.relu(x)
        # [b, 256] => [b, 128]
        x = self.fc2(x)
        x = tf.nn.relu(x)
        # [b, 128] => [b, 64]
        x = self.fc3(x)
        x = tf.nn.relu(x)
        # [b, 64] => [b, 32]
        x = self.fc4(x)
        x = tf.nn.relu(x)
        # [b, 32] => [b, 10]
        x = self.fc5(x)

        return x

5 模型的加载与预测

network = MyNetwork()
network.compile(optimizer=optimizers.Adam(lr=1e-3),
                loss=tf.losses.CategoricalCrossentropy(from_logits=True),
                metrics=['accuracy'])
network.fit(train_db, epochs=15, validation_data=test_db, validation_freq=1)

network.evaluate(test_db)

image
这个预测也是。

6 模型的保存与重新加载

network.save_weights('ckpt/weights.ckpt')
del network
print('saved to ckpt/weights.ckpt')


network = MyNetwork()
network.compile(optimizer=optimizers.Adam(lr=1e-3),
                loss=tf.losses.CategoricalCrossentropy(from_logits=True),
                metrics=['accuracy'])
network.load_weights('ckpt/weights.ckpt')
print('loaded weights from file.')
network.evaluate(test_db)

标签:network,val,keras,32,self,db,TensorFlow08,神经网络,tf
From: https://www.cnblogs.com/lipu123/p/17492313.html

相关文章

  • TensorFlow08 神经网络-模型的保存和加载
    一般情况下有三种方式:▪save/loadweights(只保存网络的参数,状态不管)▪save/loadentiremodel(把所有的状态都保存)▪saved_model(交给工厂的时候可以用,可以跨语言)1save/loadweights比如说你的网络里面有[w1,b1,w2,b2,w3,b3]这些参数,我们使用model.save_weights('')可以......
  • TensorFlow07 神经网络-自定义网络
    ▪keras.Sequential▪keras.layers.Layer▪keras.Model1keras.Sequential这样就完成了五层的神经网络的一个搭建,然后我们在activation中也可以指定每一层的激活函数2model.trainable_variables▪model.trainable_variables▪model.call()model.trainable_variabl......
  • 神经网络的应用领域研究
    目录神经网络的应用领域研究随着人工智能的不断发展,神经网络逐渐成为人工智能领域的重要组成部分。神经网络是一种基于人脑神经元连接方式的计算模型,可以模拟人脑神经元之间的相互作用,从而实现人工智能任务。神经网络的应用领域非常广泛,下面我们将对神经网络的应用领域进行研究......
  • 机器学习中的神经网络:如何创建强大的模型并解决复杂的问题
    目录文章标题:《17."机器学习中的神经网络:如何创建强大的模型并解决复杂的问题"》文章背景介绍:随着人工智能技术的快速发展,神经网络已经成为机器学习领域中最受欢迎的模型之一。神经网络是一种基于深度学习的技术,能够通过多层神经元来学习和提取特征,从而实现复杂的分类、回归和......
  • TensorFlow05.3 神经网络-FashionMNIST实战
    一.数据的加载:(x,y),(x_test,y_test)=datasets.fashion_mnist.load_data()print(x.shape,y.shape)二.数据的处理defpreprocess(x,y):x=tf.cast(x,dtype=tf.float32)/255.#归一化y=tf.cast(y,dtype=tf.int32)returnx,y batchsz=128db......
  • TensorFlow05.3 神经网络反向传播算法-多层感知机梯度(理论知识)
    首先这个是链式法则:如果扩展到多层感知机的话:我们在学这个的时候首先知道一个东西:所以这个整体的步骤就是:1.2.3.......
  • TensorFlow05.3 神经网络反向传播算法-链式法则
    1BasicRule2Productrule3QuotientRule4Chainrule(链式法则)在这个神经网络中:......
  • TensorFlow05.2 神经网络反向传播算法-单输出感知机和多输出感知机及其梯度
    1单输出感知机在这里我们可以看到,\(W_2,1^1\)其中他的下标第一个2,表示的连着上一层的x2,下标第一个1代表着连着下一侧的x1。然后上标1代表着第一层。E是做了一个loss处理。\(X_i^1\)这个下标的i代表当前层数节点的编号,然后这个1代表着第1层。\(W_i,j^k\),i表示上一层的节点编......
  • [ML从入门到入门] 初识人工神经网络、感知机算法以及反向传播算法
    前言人工神经网络(Artificialneuralnetworks,ANNs)被广泛认为诞生于20世纪四五十年代,其核心理论可以追溯到19世纪初 Adrien-MarieLegendre发明的最小二乘法,而在今天,经过了半个世纪互联网和计算机技术的迅猛发展,这片耕耘良久的沃土重新掀起了机器学习的研究热潮。本文主要......
  • TensorFlow05-3 神经网络损失函数(误差计算)
    ▪MSE▪CrossEntropyLoss(针对分类问题)▪HingeLoss1MSE一般这个N都会取一个banch。或者取到一个banch*类别个数b这里有三种求MSE的方法:loss1=tf.reduce_mean(tf.squaare(y-out))loss2=tf.squre(tf.norm(y-out))/(banch*类别个数b)loss3=tf.reduce_mean(tf.losse......