入坑tensorflow2系列(三)——tensorflow2 模型 张量与操作以及3种模型构建方式

**TensorFlow** 使用一种叫 **tensor** 的数据结构去定义所有的数据,可以把**tensor** 看成是 n 维的 **array** 或者 **list**。在 **TensorFlow** 的各部分图形间流动传递的*只能*是**tensor**。

编写TensorFlow程序时,操纵并传递的主要对象是tf.Tensor:

  1. 一个数据类型(例如 float32,int32,或string)
  2. 以及shape

张量

在这里插入图片描述

Numpy和tensorflow中的张量对比

在这里插入图片描述

操作 operation

  1. tf.strings (常用于推荐算法场景、NLP场景)
  2. tf.debugging
  3. tf.dtypes
  4. tf.math
  5. tf.random
  6. tf.feature_column https://www.tensorflow.org/tutorials/structured_data/feature_columns

常用层

  1. tf.nn:底层的函数库,其他各种库可以说都是基于这个底层
    库来进行扩展的。
    2.tf.keras.layers:如果说tf.nn是轮子,那么tf.keras.layers
    可以说是汽车。tf.keras.layers是基于tf.nn的高度封装
    3.tf.keras.layers.Dense(64, kernel_regularizer
    =tf.keras.regularizers.l1(0.01))
    4.tf.keras.layers.Dense(64, activation=tf.nn.relu)

三种建模方式

  1. Sequential model (顺序模型)
  2. Functional model (函数模型)
  3. Subclassing model (子类化模型)

Sequential model

  1. 第一种Sequential model
    from tensorflow.keras import layers
import tensorflow as tf
model = tf.keras.Sequential()
model.add(layers.Dense(64, activation='relu'))#第一层
model.add(layers.Dense(64, activation='relu'))#第二层
model.add(layers.Dense(10))#第三层

。。。。。。。

  1. 第二种Sequential model
 model = tf.keras.Sequential([
layers.Dense(64, activation='relu', input_shape=(32,)),#第一层
layers.Dense(64, activation='relu'),#第二层
layers.Dense(10)#第三层
    #。。。。。
])
model.compile(optimizer=tf.keras.optimizers.Adam(0.01),
              loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

Functional model

inputs = tf.keras.Input(shape=(32,))

inputs = tf.keras.Input(shape=(32,))

1.单输入单输出

x = layers.Dense(64, activation='relu')(inputs) #第一层
x = layers.Dense(64, activation='relu')(x) #第二层
predictions = layers.Dense(10)(x) #第三层
model = tf.keras.Model(inputs=inputs, outputs=predictions)


model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
              loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

import numpy as np
data = np.random.random((1000, 32))
labels = np.random.random((1000, 10))
model.fit(data, labels, batch_size=32, epochs=5)

2.多输入多输出

inputs1 = tf.keras.Input(shape=(32,))  #输入1
inputs2 = tf.keras.Input(shape=(32,))  #输入2
x1 = layers.Dense(64, activation='relu')(inputs1) #第一层
x2 = layers.Dense(64, activation='relu')(inputs2) #第一层
x = tf.concat([x1,x2],axis=-1)
x = layers.Dense(64, activation='relu')(x) #第二层
predictions = layers.Dense(10)(x) #第三层
model = tf.keras.Model(inputs=[inputs1,inputs2], outputs=predictions)


model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
              loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

import numpy as np
data1 = np.random.random((1000, 32))
data2 = np.random.random((1000, 32))
labels = np.random.random((1000, 10))
model.fit((data1,data2), labels, batch_size=32, epochs=5)

Subclassing model 子类模型

  1. 通过子类化tf.keras.Model和定义自己的前向传
    播模型来构建完全可定制的模型。
    2.和eager execution模式相辅相成。
class MyModel(tf.keras.Model):

    def __init__(self, num_classes=10):
        super(MyModel, self).__init__(name='my_model')
        self.num_classes = num_classes
        # 定义自己需要的层
        self.dense_1 = layers.Dense(32, activation='relu') #
        self.dense_2 = layers.Dense(num_classes)

    def call(self, inputs):
        #定义前向传播
        # 使用在 (in `__init__`)定义的层
        x = self.dense_1(inputs)
        x = self.dense_2(x)
        return x
    model = MyModel(num_classes=10)

model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
              loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

import numpy as np

data = np.random.random((1000, 32))
labels = np.random.random((1000, 10))
model.fit(data, labels, batch_size=32, epochs=5)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值