tensorflow安装教程
import tensorflow as tf #定义tensorflow为tf
print(tf.__version__) #查看tensorflow版本
print(tf.test.is_gpu_available()) #查看tensorflow是否为GPU版本
#rank 0 张量
mammal = tf.Variable("Elephant", tf.string) #0阶,字符类型,字符串
tf.print(tf.rank(mammal)) #0
tf.print(tf.shape(mammal)) #[]
#rank 1 张量
mystr = tf.Variable(["Hello"], tf.string) #1阶,字符类型,列表
tf.print(tf.rank(mystr)) #1
tf.print(tf.shape(mystr)) #[1]
#rank 2 张量
mymat = tf.Variable([[7],[11]], tf.int16) #0阶,字符类型,字符串
tf.print(tf.rank(mymat)) #2 元素个数
tf.print(tf.shape(mymat)) #[2 1] 相当于几行几列
#创建张量
tf.constant([1,2,3], dtype=tf.int16) #
tf.zeros((2,2),dtype=tf.int16)
'''张量行列,数据类型,数据元素,
tf.reduce_sum(a,axis=1) 按照某一列或者某一行进行相加或相减
a.get_shape() 查看维度
tf.reshape(a,(1,4)) 进行维度变换,有2*2变成1*4
b*5+1 数学运算
tf.matmul(a,b)
a[0,0];a[:,0];a[0,:] 进行索引
'''
#reshape
rank_three_tensor=tf.ones([3,4,5])
matrix=tf.reshape(rank_three_tensor,[6,10]) #三维到二维
#tf.strings
#字符切割
tf.strings.bytes_split('hello') #
help(tf.strings.split) #官方帮助文档,有栗子
#单词切割 默认以空格为切割
tf.strings.split('hello world') #
#string hash 哈希算法,转化为数数字
tf.strings.to_hash_bucket(['hello','world'], num_buckets=10) #
#tf.debugging tf自带debug函数
a=tf.random.uniform((10,10))
tf.debugging.assert_equal(x=a.shape,y=(10,10)) #判断维数是否一致,没问题则继续往下执行
tf.debugging.assert_equal(x=a.shape,y=(10,20)) #出现错误则报错
import tensorflow as tf
a = tf.random.uniform(shape=(10,5),minval=0,maxval=10) #随机函数
a
'''
'''
a = tf.constant([[1,2],[3,4]]) #初始化2个2*2的张量
b = tf.constant([[5,6],[7,8]])
tf.print(tf.math.add(a,b)) #加减乘除
tf.print(tf.math.subtract(a,b))
tf.print(tf.math.multiply(a,b))
tf.print(tf.math.divide(a,b))
'''
[[6 8]
[10 12]]
[[-4 -4]
[-4 -4]]
[[5 12]
[21 32]]
[[0.2 0.33333333333333331]
[0.42857142857142855 0.5]]
'''
x = tf.constant([1.8,2.2],dtype=tf.float32) #创建一维张量
x1 = tf.dtypes.cast(x,tf.int32) #将浮点数据转化为整形数据
x1
#
#文本分类
a = tf.random.nuiform(shape=(10,100,50),minval=-0.5,maxval=0.5) #张量
x = tf.keras.layers.LSTM(100)(a) #LSTM
x = tf.keras.layers.Dense(10)(x) #全连接层
x = tf.nn.softmax(x) #激活函数
#第一种Sequential model
from tensorflow.keras import layers
model = tf.keras.Sequential()
model.add(layers.Dense(64, activation='relu')) #第一层
model.add(layers.Dense(64, activation='relu')) #第二层
model.add(layers.Dense(10)) #第三层
#。。。。。
#第二种Sequential model
model = tf.keras.Seqential([
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'])
import numpy as np
data = np.random.random((1000, 32))
labels = np.random.random((1000,10))
model.fit(data,labels,epochs=10,batch_size=32)
'''
tf.keras.Model.fit(用于训练模型)
- epochs:训练分为几个时期。每一个epoch是对整个输入数据的一次迭代(此操作以较小的批次完成)。
- batch_size:当传递NumPy数据时,模型将数据切成较小的批次,并在训练期间对这些批次进行迭代。该整数指定每个批次的大小。请注意,如果不能将样本总数除以批次大小,则最后一批可能会更小。
- validation_data:在模型训练时,监控在某些验证数据上监视其性能。传递此参数(输入和标签的元组)可以使模型在每个时期结束时以推断模式显示所传递数据的损失和度量。
'''
inputs = tf.keras.Input(shape=(32,)) #输入
#input = tf.keras.Inout(shape=(32,)) #可进行多个输入
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)
inputs1 = tf.keras.Input(shape=(32,)) #输入
inputs2 = tf.keras.Input(shape=(32,)) #可进行多个输入
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)
#定义一个子类化模型
from tensorflow.keras import layers
import tensorflow as tf
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)
return self.dense_2(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)