天天看點

TensorFlow之常用函數

import tensorflow as tf
import numpy as np

#建立
w=tf.constant([1,2,3,4,5], dtype=None, shape=None, name='Const')
tf.convert_to_tensor(np.array([1, 2, 3]), dtype=None, dtype_hint=None, name=None)
tf.fill([2,3], 9, name=None)
tf.zeros([2,3],dtype=tf.dtypes.float32, name=None)
tf.ones([2,3], dtype=tf.dtypes.float32, name=None)
tf.Variable(
    initial_value=None, trainable=None, validate_shape=True, caching_device=None,
    name=None, variable_def=None, dtype=None, import_scope=None, constraint=None,
    synchronization=tf.VariableSynchronization.AUTO,
    aggregation=tf.compat.v1.VariableAggregation.NONE, shape=None
)
'''
assign(value, use_locking=False, name=None, read_value=True)
assign_add(delta, use_locking=False, name=None, read_value=True)
assign_sub(delta, use_locking=False, name=None, read_value=True)
'''
tf.random.normal([2,3], mean=0.0, stddev=1.0, dtype=tf.dtypes.float32, seed=None, name=None)#正态分布
tf.random.truncated_normal([2,3], mean=0.0, stddev=1.0, dtype=tf.dtypes.float32, seed=None, name=None)#截斷正态分布
tf.random.uniform([2,3], minval=0, maxval=None, dtype=tf.dtypes.float32, seed=None, name=None)#均勻分布

rdm = np.random.RandomState(seed=1)
a = rdm.rand()# 生成[0,1)之間的随機數

x, y = np.mgrid[1:3:1, 2:4:0.5]
grid = np.c_[x.ravel(), y.ravel()]

#轉換
tf.cast(w, tf.dtypes.int64, name=None)

#比較
tf.reduce_min(w, axis=None, keepdims=False, name=None)
tf.reduce_max(w, axis=None, keepdims=False, name=None)
tf.reduce_mean(w, axis=None, keepdims=False, name=None)
tf.reduce_sum(w, axis=None, keepdims=False, name=None)
tf.argmax(w, axis=0)#索引值 按列
tf.argmax(w, axis=1)#按行
tf.where(tf.greater(w, w), x=None, y=None, name=None)
'''
tf.greater傳回值:一個清單,元素值都是true和false
'''

#計算(對應位置)
tf.add(w, w)
tf.subtract(w, w)
tf.multiply(w, w)
tf.divide(w, w)
tf.pow(w,3)
tf.square(w)
tf.sqrt(w)
tf.matmul(w, w, transpose_a=False, transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None)
'''
矩陣相乘
transpose_a: 如果為真, a則在進行乘法計算前進行轉置。 
transpose_b: 如果為真, b則在進行乘法計算前進行轉置。 
adjoint_a: 如果為真, a則在進行乘法計算前進行共轭和轉置。 
adjoint_b: 如果為真, b則在進行乘法計算前進行共轭和轉置。 
a_is_sparse: 如果為真, a會被處理為稀疏矩陣。 
b_is_sparse: 如果為真, b會被處理為稀疏矩陣。 
name: 操作的名字(可選參數) 
'''

#截取
tf.data.Dataset.from_tensor_slices(w)

#梯度
with tf.GradientTape() as tape:
    loss = tf.square(w + 1)
grads = tape.gradient(loss, w)

#周遊
seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
    print(i, element)

#編碼
tf.one_hot([0,1,2], 3, on_value=None, off_value=None, axis=None, dtype=None, name=None)

#去維
tf.squeeze([[0,1,2]], axis=None, name=None)

#機率分布
tf.nn.softmax(tf.constant([1,2,3]), axis=None, name=None)

import pandas as pd
from pandas import DataFrame
#表格
DataFrame(w, columns=['花萼長度', '花萼寬度', '花瓣長度', '花瓣寬度'])
pd.set_option('display.unicode.east_asian_width', True)

#加載資料
from sklearn import datasets
#iris
x_data = datasets.load_iris().data
y_data = datasets.load_iris().target

#loss
tf.reduce_mean(tf.square(w - y))
tf.losses.categorical_crossentropy([1, 0], [0.8, 0.2])
tf.nn.softmax_cross_entropy_with_logits(w, y)#先求w的softmax然後求交叉熵