TensorFlow基础入门十大操作总结

Tensorflow入门 文章简单介绍了tensorflow和keras,并用鸢尾花(iris)分类案例,介绍tf.keras的基本使用流程。 阅读详情

TensorFlow 

Author:李祖贤

From:Datawhale

TensorFlow 是一个开源的、基于 Python 的机器学习框架,它由 Google 开发,提供了 Python,C/C++、Java、Go、R 等多种编程语言的接口,并在图形分类、音频处理、推荐系统和自然语言处理等场景下有着丰富的应用,是目前最热门的机器学习框架。

但不少小伙伴跟我吐苦水说Tensorflow的应用太乱了,感觉学的云里雾里,能不能搞个Tensorflow的教程呀。今天,就和大家一起梳理下TensorFlow的十大基础操作。详情如下:

一、Tensorflow的排序与张量

Tensorflow允许用户把张量操作和功能定义为计算图。张量是通用的数学符号,代表保存数据值的多维列阵,张量的维数称为阶。

引用相关的库

import tensorflow as tf
import numpy as np

获取张量的阶(从下面例子看到tf的计算过程)

# 获取张量的阶(从下面例子看到tf的计算过程)
g = tf.Graph()
# 定义一个计算图
with g.as_default():
    ## 定义张量t1,t2,t3
    t1 = tf.constant(np.pi)
    t2 = tf.constant([1,2,3,4])
    t3 = tf.constant([[1,2],[3,4]])
    
    ## 获取张量的阶
    r1 = tf.rank(t1)
    r2 = tf.rank(t2)
    r3 = tf.rank(t3)
    
    ## 获取他们的shapes
    s1 = t1.get_shape()
    s2 = t2.get_shape()
    s3 = t3.get_shape()
    print("shapes:",s1,s2,s3)
# 启动前面定义的图来进行下一步操作
with tf.Session(graph=g) as sess:
    print("Ranks:",r1.eval(),r2.eval(),r3.eval())

二、Tensorflow 计算图

Tensorflow 的核心在于构建计算图,并用计算图推导从输入到输出的所有张量之间的关系。

假设有0阶张量a,b,c,要评估  ,可以表示为下图所示的计算图:

可以看到,计算图就是一个节点网络,每个节点就像是一个操作,将函数应用到输入张量,然后返回0个或者更多个张量作为张量作为输出。

在Tensorflow编制计算图步骤如下: 

    1. 初始化一个空的计算图

    2. 为该计算图加入节点(张量和操作)

    3. 执行计算图:

        a.开始一个新的会话

        b.初始化图中的变量

        c.运行会话中的计算图

# 初始化一个空的计算图
g = tf.Graph()


# 为该计算图加入节点(张量和操作)
with g.as_default():
    a = tf.constant(1,name="a")
    b = tf.constant(2,name="b")
    c = tf.constant(3,name="c")
    
    z = 2*(a-b)+c
    
# 执行计算图
## 通过调用tf.Session产生会话对象,该调用可以接受一个图为参数(这里是g),否则将启动默认的空图
## 执行张量操作的用sess.run(),他将返回大小均匀的列表
with tf.Session(graph=g) as sess:
    print('2*(a-b)+c =>',sess.run(z))
2*(a-b)+c => 1

三、Tensorflow中的占位符

Tensorflow有提供数据的特别机制。其中一种机制就是使用占位符,他们是一些预先定义好类型和形状的张量。

通过调用tf.placeholder函数把这些张量加入计算图中,而且他们不包括任何数据。然而一旦执行图中的特定节点就需要提供数据阵列。

3.1 定义占位符

g = tf.Graph()


with g.as_default():
    tf_a = tf.placeholder(tf.int32,shape=(),name="tf_a")  # shape=[]就是定义0阶张量,更高阶张量可以用【n1,n2,n3】表示,如shape=(3,4,5)
    tf_b = tf.placeholder(tf.int32,shape=(),name="tf_b")
    tf_c = tf.placeholder(tf.int32,shape=(),name="tf_c")
    
    r1 = tf_a - tf_b
    r2 = 2*r1
    z = r2 + tf_c
3.2 为占位符提供数据

当在图中处理节点的时候,需要产生python字典来为占位符来提供数据阵列。

with tf.Session(graph=g) as sess:
    feed = {
        tf_a:1,
        tf_b:2,
        tf_c:3
    }
    
    print('z:',sess.run(z,feed_dict=feed))
z: 1

3.3 用batch_sizes为数据阵列定义占位符

在研发神经网络模型的时候,有时会碰到大小规模不一致的小批量数据。占位符的一个功能是把大小无法确定的维度定义为None。

g = tf.Graph()


with g.as_default():
    tf_x = tf.placeholder(tf.float32,shape=(None,2),name="tf_x")
    x_mean = tf.reduce_mean(tf_x,axis=0,name="mean")
    
np.random.seed(123)
with tf.Session(graph=g) as sess:
    x1 = np.random.uniform(low=0,high=1,size=(5,2))
    print("Feeding data with shape",x1.shape)
    print("Result:",sess.run(x_mean,feed_dict={tf_x:x1}))
    
    x2 = np.random.uniform(low=0,high=1,size=(10,2))
    print("Feeding data with shape",x2.shape)
    print("Result:",sess.run(x_mean,feed_dict={tf_x:x2}))

四、Tensorflow 的变量

就Tensorflow而言,变量是一种特殊类型的张量对象,他允许我们在训练模型阶段,在tensorflow会话中储存和更新模型的参数。

4.1 定义变量

  • 方式1:tf.Variable() 是为新变量创建对象并将其添加到计算图的类。

  • 方式2:tf.get_variable()是假设某个变量名在计算图中,可以复用给定变量名的现有值或者不存在则创建新的变量,因此变量名的name非常重要!

无论采用哪种变量定义方式,直到调用tf.Session启动计算图并且在会话中具体运行了初始化操作后才设置初始值。事实上,只有初始化Tensorflow的变量之后才会为计算图分配内存。

g1 = tf.Graph()


with g1.as_default():
    w = tf.Variable(np.array([[1,2,3,4],[5,6,7,8]]),name="w")
    print(w)

4.2 初始化变量

由于变量是直到调用tf.Session启动计算图并且在会话中具体运行了初始化操作后才设置初始值,只有初始化Tensorflow的变量之后才会为计算图分配内存。因此这个初始化的过程十分重要,这个初始化过程包括:为 相关张量分配内存空间并为其赋予初始值。
初始化方式:

  • 方式1.tf.global_variables_initializer函数,返回初始化所有计算图中现存的变量,要注意的是:定义变量一定要造初始化之前,不然会报错!!!

  • 方式2:将tf.global_variables_initializer函数储存在init_op(名字不唯一,自己定)对象内,然后用sess.run出来

with tf.Session(graph=g1) as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(w))

# 我们来比较定义变量与初始化顺序的关系
g2 = tf.Graph()


with g2.as_default():
    w1 = tf.Variable(1,name="w1")
    init_op = tf.global_variables_initializer()
    w2 = tf.Variable(2,name="w2")
    
with tf.Session(graph=g2) as sess:
    sess.run(init_op)
    print("w1:",sess.run(w1))
w1: 1
with tf.Session(graph=g2) as sess:    sess.run(init_op)
    print("w2:",sess.run(w2))

4.3 变量范围

变量范围是一个重要的概念,对建设大型神经网络计算图特别有用。

可以把变量的域划分为独立的子部分。在创建变量时,该域内创建的操作与张量的名字都以域名为前缀,而且这些域可以嵌套。

g = tf.Graph()


with g.as_default():
    with tf.variable_scope("net_A"):   #定义一个域net_A
        with tf.variable_scope("layer-1"): # 在域net_A下再定义一个域layer-1
            w1 = tf.Variable(tf.random_normal(shape=(10,4)),name="weights")   # 该变量定义在net_A/layer-1域下
        with tf.variable_scope("layer-2"):
            w2 = tf.Variable(tf.random_normal(shape=(20,10)),name="weights")
    with tf.variable_scope("net_B"):   # 定义一个域net_B
        with tf.variable_scope("layer-2"):
            w3 = tf.Variable(tf.random_normal(shape=(10,4)),name="weights")
    print(w1)
    print(w2)
    print(w3)

五、建立回归模型

我们需要定义的变量:

  • 1.输入x:占位符tf_x

  • 2.输入y:占位符tf_y

  • 3.模型参数w:定义为变量weight

  • 4.模型参数b:定义为变量bias

  • 5.模型输出 ̂ y^:有操作计算得到

import tensorflow  as tf
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline


g = tf.Graph()


# 定义计算图
with g.as_default():
    tf.set_random_seed(123)
    
    ## placeholder
    tf_x = tf.placeholder(shape=(None),dtype=tf.float32,name="tf_x")
    tf_y = tf.placeholder(shape=(None),dtype=tf.float32,name="tf_y")
    
    ## define the variable (model parameters)
    weight = tf.Variable(tf.random_normal(shape=(1,1),stddev=0.25),name="weight")
    bias = tf.Variable(0.0,name="bias")
    
    ## build the model
    y_hat = tf.add(weight*tf_x,bias,name="y_hat")
    
    ## compute the cost
    cost = tf.reduce_mean(tf.square(tf_y-y_hat),name="cost")
    
    ## train the model
    optim = tf.train.GradientDescentOptimizer(learning_rate=0.001)
    train_op = optim.minimize(cost,name="train_op")
# 创建会话启动计算图并训练模型
## create a random toy dataset for regression
np.random.seed(0)
def make_random_data():
    x = np.random.uniform(low=-2,high=4,size=100)
    y = []
    for t in x:
        r = np.random.normal(loc=0.0,scale=(0.5 + t*t/3),size=None)
        y.append(r)
    return x,1.726*x-0.84+np.array(y)


x,y = make_random_data()


plt.plot(x,y,'o')
plt.show()

## train/test splits
x_train,y_train = x[:100],y[:100]
x_test,y_test = x[100:],y[100:]


n_epochs = 500
train_costs  = []
with tf.Session(graph=g) as sess:
    sess.run(tf.global_variables_initializer())
    
    ## train the model for n_epochs
    for e in range(n_epochs):
        c,_ = sess.run([cost,train_op],feed_dict={tf_x:x_train,tf_y:y_train})
        train_costs.append(c)
        if not e % 50:
            print("Epoch %4d: %.4f"%(e,c))
plt.plot(train_costs)
plt.show()

六、在Tensorflow计算图中用张量名执行对象

只需要把

sess.run([cost,train_op],feed_dict={tf_x:x_train,tf_y:y_train})

改为

sess.run(['cost:0','train_op:0'],feed_dict={'tf_x:0':x_train,'tf_y:0':y_train})

注意:只有张量名才有:0后缀,操作是没有:0后缀的,例如train_op并没有train_op:0

## train/test splits
x_train,y_train = x[:100],y[:100]
x_test,y_test = x[100:],y[100:]


n_epochs = 500
train_costs  = []
with tf.Session(graph=g) as sess:
    sess.run(tf.global_variables_initializer())
    
    ## train the model for n_epochs
    for e in range(n_epochs):
        c,_ = sess.run(['cost:0','train_op'],feed_dict={'tf_x:0':x_train,'tf_y:0':y_train})
        train_costs.append(c)
        if not e % 50:
            print("Epoch %4d: %.4f"%(e,c))

七、在Tensorflow中储存和恢复模型

神经网络训练可能需要几天几周的时间,因此我们需要把训练出来的模型储存下来供下次使用。

储存的方法是在定义计算图的时候加入:saver = tf.train.Saver(),并且在训练后输入saver.save(sess,'./trained-model')

g = tf.Graph()


# 定义计算图
with g.as_default():
    tf.set_random_seed(123)
    
    ## placeholder
    tf_x = tf.placeholder(shape=(None),dtype=tf.float32,name="tf_x")
    tf_y = tf.placeholder(shape=(None),dtype=tf.float32,name="tf_y")
    
    ## define the variable (model parameters)
    weight = tf.Variable(tf.random_normal(shape=(1,1),stddev=0.25),name="weight")
    bias = tf.Variable(0.0,name="bias")
    
    ## build the model
    y_hat = tf.add(weight*tf_x,bias,name="y_hat")
    
    ## compute the cost
    cost = tf.reduce_mean(tf.square(tf_y-y_hat),name="cost")
    
    ## train the model
    optim = tf.train.GradientDescentOptimizer(learning_rate=0.001)
    train_op = optim.minimize(cost,name="train_op")
    saver = tf.train.Saver()
# 创建会话启动计算图并训练模型
## create a random toy dataset for regression
np.random.seed(0)
def make_random_data():
    x = np.random.uniform(low=-2,high=4,size=100)
    y = []
    for t in x:
        r = np.random.normal(loc=0.0,scale=(0.5 + t*t/3),size=None)
        y.append(r)
    return x,1.726*x-0.84+np.array(y)


x,y = make_random_data()


plt.plot(x,y,'o')
plt.show()


## train/test splits
x_train,y_train = x[:100],y[:100]
x_test,y_test = x[100:],y[100:]


n_epochs = 500
train_costs  = []
with tf.Session(graph=g) as sess:
    sess.run(tf.global_variables_initializer())
    
    ## train the model for n_epochs
    for e in range(n_epochs):
        c,_ = sess.run(['cost:0','train_op'],feed_dict={'tf_x:0':x_train,'tf_y:0':y_train})
        train_costs.append(c)
        if not e % 50:
            print("Epoch %4d: %.4f"%(e,c))
    saver.save(sess,'C:/Users/Leo/Desktop/trained-model/')

# 加载保存的模型g2 = tf.Graph()
with tf.Session(graph=g2) as sess:
    new_saver = tf.train.import_meta_graph("C:/Users/Leo/Desktop/trained-model/.meta")
    new_saver.restore(sess,'C:/Users/Leo/Desktop/trained-model/')
    y_pred = sess.run('y_hat:0',feed_dict={'tf_x:0':x_test})

## 可视化模型
x_arr = np.arange(-2,4,0.1)
g2 = tf.Graph()
with tf.Session(graph=g2) as sess:
    new_saver = tf.train.import_meta_graph("C:/Users/Leo/Desktop/trained-model/.meta")
    new_saver.restore(sess,'C:/Users/Leo/Desktop/trained-model/')
    y_arr = sess.run('y_hat:0',feed_dict={'tf_x:0':x_arr})
    plt.figure()
    plt.plot(x_train,y_train,'bo')
    plt.plot(x_test,y_test,'bo',alpha=0.3)
    plt.plot(x_arr,y_arr.T[:,0],'-r',lw=3)
    plt.show()

八、把张量转换成多维数据阵列

8.1 获得张量的形状

在numpy中我们可以用arr.shape来获得Numpy阵列的形状,而在Tensorflow中则用tf.get_shape函数完成:

注意:在tf.get_shape函数的结果是不可以索引的,需要用as.list()换成列表才能索引。

g = tf.Graph()


with g.as_default():
    arr = np.array([[1.,2.,3.,3.5],[4.,5.,6.,6.5],[7.,8.,9.,9.5]])
    T1 = tf.constant(arr,name="T1")
    print(T1)
    s = T1.get_shape()
    print("Shape of T1 is ",s)
    T2 = tf.Variable(tf.random_normal(shape=s))
    print(T2)
    T3 = tf.Variable(tf.random_normal(shape=(s.as_list()[0],)))
    print(T3)

8.2 改变张量的形状

现在来看看Tensorflow如何改变张量的形状,在Numpy可以用np.reshape或arr.reshape,在一维的时候可以用-1来自动计算最后的维度。在Tensorflow内调用tf.reshape

with g.as_default():
    T4 = tf.reshape(T1,shape=[1,1,-1],name="T4")
    print(T4)
    T5 = tf.reshape(T1,shape=[1,3,-1],name="T5")
    print(T5)

with tf.Session(graph=g) as sess:
    print(sess.run(T4))
    print()
    print(sess.run(T5))

8.3 将张量分裂为张量列表
with g.as_default():
    tf_splt = tf.split(T5,num_or_size_splits=2,axis=2,name="T8")
    print(tf_splt)

8.4 张量的拼接

g = tf.Graph()


with g.as_default():
    t1 = tf.ones(shape=(5,1),dtype=tf.float32,name="t1")
    t2 = tf.zeros(shape=(5,1),dtype=tf.float32,name="t2")
    print(t1)
    print(t2)

with g.as_default():
    t3 = tf.concat([t1,t2],axis=0,name="t3")
    print(t3)
    t4 = tf.concat([t1,t2],axis=1,name="t4")
    print(t4)

with tf.Session(graph=g) as sess:
    print(t3.eval())
    print()
    print(t4.eval())

with tf.Session(graph=g) as sess:    print(sess.run(t3))
    print()
    print(sess.run(t4))

九、利用控制流构图

这里主要讨论在Tensorflow执行像python一样的if语句,循环while语句,if...else..语句等。

9.1 条件语句

tf.cond()语句我们来试试:

x,y = 1.0,2.0


g = tf.Graph()


with g.as_default():
    tf_x = tf.placeholder(dtype=tf.float32,shape=None,name="tf_x")
    tf_y = tf.placeholder(dtype=tf.float32,shape=None,name="tf_y")
    res = tf.cond(tf_x<tf_y,lambda: tf.add(tf_x,tf_y,name="result_add"),lambda: tf.subtract(tf_x,tf_y,name="result_sub"))
    print("Object:",res)  #对象被命名为"cond/Merge:0"
    
with tf.Session(graph=g) as sess:
    print("x<y: %s -> Result:"%(x<y),res.eval(feed_dict={"tf_x:0":x,"tf_y:0":y}))
    x,y = 2.0,1.0
    print("x<y: %s -> Result:"%(x<y),res.eval(feed_dict={"tf_x:0":x,"tf_y:0":y}))

9.2 执行python的if...else语句

tf.case()

f1 = lambda: tf.constant(1)
f2 = lambda: tf.constant(0)
result = tf.case([(tf.less(x,y),f1)],default=f2)
print(result)

9.3 执行python的while语句

tf.while_loop()

i = tf.constant(0)
threshold = 100
c = lambda i: tf.less(i,100)
b = lambda i: tf.add(i,1)
r = tf.while_loop(cond=c,body=b,loop_vars=[i])
print(r)

十、用TensorBoard可视化图

TensorBoard是Tensorflow一个非常好的工具,它负责可视化和模型学习。可视化允许我们看到节点之间的连接,探索它们之间的依赖关系,并且在需要的时候进行模型调试。

def build_classifier(data, labels, n_classes=2):
    data_shape = data.get_shape().as_list()
    weights = tf.get_variable(name='weights',
                              shape=(data_shape[1], n_classes),
                              dtype=tf.float32)
    bias = tf.get_variable(name='bias',
                           initializer=tf.zeros(shape=n_classes))
    print(weights)
    print(bias)
    logits = tf.add(tf.matmul(data, weights),
                    bias,
                    name='logits')
    print(logits)
    return logits, tf.nn.softmax(logits)


def build_generator(data, n_hidden):
    data_shape = data.get_shape().as_list()
    w1 = tf.Variable(
        tf.random_normal(shape=(data_shape[1],
                                n_hidden)),
        name='w1')
    b1 = tf.Variable(tf.zeros(shape=n_hidden),
                     name='b1')
    hidden = tf.add(tf.matmul(data, w1), b1,
                    name='hidden_pre-activation')
    hidden = tf.nn.relu(hidden, 'hidden_activation')
        
    w2 = tf.Variable(
        tf.random_normal(shape=(n_hidden,
                                data_shape[1])),
        name='w2')
    b2 = tf.Variable(tf.zeros(shape=data_shape[1]),
                     name='b2')
    output = tf.add(tf.matmul(hidden, w2), b2,
                    name = 'output')
    return output, tf.nn.sigmoid(output)


batch_size=64
g = tf.Graph()


with g.as_default():
    tf_X = tf.placeholder(shape=(batch_size, 100),
                          dtype=tf.float32,
                          name='tf_X')
    ## build the generator
    with tf.variable_scope('generator'):
        gen_out1 = build_generator(data=tf_X,
                                   n_hidden=50)
    
    ## build the classifier
    with tf.variable_scope('classifier') as scope:
        ## classifier for the original data:
        cls_out1 = build_classifier(data=tf_X,
                                    labels=tf.ones(
                                        shape=batch_size))
        
        ## reuse the classifier for generated data
        scope.reuse_variables()
        cls_out2 = build_classifier(data=gen_out1[1],
                                    labels=tf.zeros(
                                        shape=batch_size))
        
        init_op = tf.global_variables_initializer()

with tf.Session(graph=g) as sess:
    sess.run(tf.global_variables_initializer())
    file_writer = tf.summary.FileWriter(logdir="C:/Users/Leo/Desktop/trained-model/logs/",graph=g)

在win+R输入cmd后输入命令:

tensorboard --logdir="C:/Users/Leo/Desktop/trained-model/logs"


接着复制这个链接到浏览器打开:

欢迎扫码关注:

从零开始的TensorFlow入门指南:构建第一个模型并可视化训练过程 当谈到深度学习框架时,TensorFlow是最流行的之一。它是一个由Google开发的开源框架,被广泛应用于图像识别、语音识别、自然语言处理和强化学习等领域。本篇文章将介绍TensorFlow的基本概念和入门步骤,帮助初学者快速掌握TensorFlow。 一、TensorFlow基础概念TensorFlow是一个用于构建和训练机器学习模型的框架。它主要包括以下几个核心概念:张量(Tensor):张量是TensorFlow中的基本数据类型,可以看作是一个n维数组。例如,标量是一个零维张量,向量是一维张量,矩阵 阅读详情

相关推荐

Tensorflow基础入门超全总结

tf.keras是TensorFlow 2.0的高阶API接口,为TensorFlow的代码提供了新的风格和设计模式,大大提升了TF代码的简洁性和复用性,官方也推荐使用tf.keras来进行模型设计和开发。

m0_57290404的博客 1033

TensorFlow入门

TensorFlow入门 一、步骤: ①准备数据:采集大量“特征/标签”数据 ②搭建网络:搭建神经网络结构 ③优化参数:训练网络获取最佳参数(反传) ④应用网络:将网络保存为模型,输入新数据,输出分类或预测结果(前传) 二、鸢尾花分类 1、采集大量数据对(花萼长、花萼宽、花瓣长、花瓣宽,对应的类别)构成数据集。 输入特征 标签 把数据集喂入搭建好的神经网络结构,网络优化参数得到模型,模型读入新输入特征,输出识别结果。 2、输入层四个

Falcont的博客 928

TensorFlow2 入门指南 | 01 浅谈 TensorFLow2 入门

还在学TensorFlow1.x,你out了!大佬们都在用Tensorflow2了!

不积跬步,无以至千里! 7498

Tensorflow基础入门十大操作总结

↑↑↑关注后"星标"Datawhale每日干货&每月组队学习,不错过Datawhale干货作者:李祖贤,Datawhale高校群成员,深圳大学Tensor...

Datawhale 1292

TensorFlow2 入门指南 | 05 TensorFlow2 基本操作总结

一文带你全方位掌握TensorFlow基本操作!

不积跬步,无以至千里! 3551

TensorFlow2 入门指南 | 06 TensorFLow2 高阶操作汇总

全网最全的 TensorFlow2 进阶操作汇总,带你轻松入门 TensorFlow2 !

不积跬步,无以至千里! 5108

tensorflow 转张量类型为float_Tensorflow基础入门十大操作总结

Datawhale干货作者:李祖贤,Datawhale高校群成员,深圳大学TensorFlow 是一个开源的、基于 Python 的机器学习框架,它由 Google 开发,提供了Python,C/C++、Java、Go、R 等多种编程语言的接口,并在图形分类、音频处理、推荐系统和自然语言处理等场景下有着丰富的应用,是目前最热门的机器学习框架。但不少小伙伴跟我吐苦水说Tensorfl...

weixin_39967598的博客 527

ADS笔记,新旧两组仿真数据进行绘图和列表对比

原理图器件参数的不同,怎么进行对比观看,操作如下。

彭辉荣的博客 3871

tensorflow零基础入门学习

tensorflow0基础入门学习!!! 张量(Tensor) 概念:多维数组(列表)。其中阶数=张量的维数。tensor就是张量 数据类型 (1) 整型和浮点型 tf.int32 tf.float32 tf.float64 (2) 布尔型 tf.constant([True,False]) (3) 字符串 tf.constant("Hello,world!") 创建一个Tensor 语法:tf.constant(张量内容,d..

m0_60524373的博客 2828

STM32CubeMX+FreeRTOS+CAN总线+传感器实战:多任务系统与通信融合开发详解

本文详细介绍了基于STM32CubeMX和FreeRTOS的CAN总线与光电传感器融合开发实战。通过多任务系统设计,实现传感器数据采集与CAN通信的协同工作,提供完整的配置例程和调试技巧,适用于工业控制与机器人感知等应用场景。

n2o3p4的博客 735

RK3588平台-ES8388音频驱动调试与设备树配置实战

本文详细解析了在RK3588平台上调试ES8388音频驱动的实战过程。内容涵盖Linux音频驱动的三层架构(Machine、Platform、Codec),并重点提供了设备树(DTS)的完整配置示例,包括I2C节点、声卡节点及音频路由设置。文章还分享了驱动加载验证、amixer调试命令以及常见问题(如无声、变调)的排查思路,旨在帮助开发者快速完成RK3588与ES8388的音频系统集成。

mango的博客 810

零基础小白如何快速入门TensorFlow

学习 TensorFlow 需要时间和实践,但通过不断的练习和参与项目,你会逐渐掌握深度学习和机器学习的核心概念和技术。最重要的是动手实践,通过实践来不断解决问题和优化代码,这样才能深入理解 TensorFlow 的强大功能。

小宝哥Code的专栏 3096

1. Klipper从安装到运行

本文记录Klipper固件从安装,配置到运行的详细过程

weixin_42098934的博客 1万+

【Tensorflow】Tensorflow详细入门

一、Tensorflow介绍   TensorFlow 是一个采用 数据流图(Data flow graphs),用于 数值计算 的开源软件库。TensorFlow 最初由Google大脑小组的研究员和工程师们开发出来,用于 机器学习和深度神经网络 方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。它是谷歌基于 DistBelief 进行研发的第二代人工智能学习系统。2015年11月9日...

Daycym的博客 2871

stm32控制舵机_使用URT-1控制飞特舵机上手教程(SM40BL舵机为例)

使用URT-1控制飞特舵机上手教程(SM40BL舵机为例):1,参阅URT-1使用说明.pdf2, 材料清单:① URT-1驱动板② 连接驱动板与电脑的MINI USB 连接线③ 给舵机供电的电源④ 舵机与舵机连接线⑤ 杜邦线(可选)3,将URT-1驱动板与电脑连接4,安装驱动,参阅文件CH340驱动,检查设备管理器串口号。5,舵机连接URT-1驱动板,驱动板接电源,参考下图:6,打开FD软件进行...

weixin_39564510的博客 3432

瑞萨单片机,把CS文件转换为CC

1、打开CC的软件: 点击坐上角的"START" 点击"Create New Project"的"GO": 导入工程: 如下图设置后,点击"Create" 2、进入到CC的开发界面: 可以看到原启动库文件以asm文件的方式直接出现在工程中: 删除新生成的main.c,保留导入的r_main.c(以你自己的代码为准): 注意添加所有的头文件路径: 点击"...

weixin_37611121的博客 1228

tensorflow基础语法入门

文章目录语法入门1,常量定义2,定义运算结构(实际并不运算)3,定义会话Seesion,并执行4,定义变量5,占位变量机制6,矩阵乘7,全局初始化8,feed_dict字典输入补充 语法入门 1,常量定义 a = tf.constant([1, 2], name="a") b = tf.constant([2, 3], name="b") 2,定义运算结构(实际并不运算) result = a+...

Zeking的博客 1584

ANSYS WORKBENCH——参数化建模以及参数优化(结果导出为Excel)

目录 1、打开软件workbench 2、找到static structure,双击打开 3、选择材料 4、参数化建模 ​ 注:印记面的创建 5、模型属性设置 注:设置优化目标 6、回主界面,选择direct optimization模块 1、打开软件workbench 2、找到static structure,双击打开 3、选择材料 4、参数化建模 至此参数化建模就已经完成啦 注:印记面的创建 印记面一般是一个虚拟的区域,参与实际的网格划分,但是只是由于载.

python_AI_fans的博客 1万+

Tensorflow从入门到精通之——Tensorflow基本操作

前边的章节介绍了什么是Tensorflow,本节将带大家真正走进Tensorflow的世界,学习Tensorflow一些基本的操作及使用方法。同时也欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识! Tensorflow是一种计算图模型,即用图的形式来表示运算过程的一种模型。Tensorflow程序一般分为图的构建...

TensorFlowNews 1万+

【WorkBuddy专栏50】代码开发技术体系深度分析——前端、后端、全栈、移动端、数据工程,WB和CODEBUDDY谁更擅长?

【WorkBuddy专栏50】代码开发技术体系深度分析——前端、后端、全栈、移动端、数据工程,WB和CODEBUDDY谁更擅长?

AI人人懂 244

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

demucs 六源音频分离:从安装到 6 轨输出的完整指南

Demucs 是一款开源音乐音源分离工具:输入一首歌,输出人声、鼓、贝斯、其他乐器(`htdemucs_6s` 模型另加钢琴与吉他,共 6 轨)。默认模型 `htdemucs` 在 MUSDB HQ 测试集上取得 **9.00 dB** 的 Overall SDR,CPU 处理耗时约为歌曲时长的 **1.5 倍**——知道这两点,就能决定它值不值得在你的机器上跑起来。 ## 🎯 一句话定位:D

gitblog_00331的博客 742

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

大一的你如何入门TensorFlow

首先可能需要巩固Python基础,特别是NumPy和数据处理相关的库,因为TensorFlow很多操作和这些库有关联。比如,监督学习、损失函数、梯度下降这些概念,需要先有个初步的认识。通过以上路径,你可以在实践中逐步掌握 TensorFlow 的核心功能,同时打下扎实的机器学习基础。相信四年后,你会收获满满。学习 NumPy 库:TensorFlow 的张量(Tensor)操作与 NumPy 的数组操作高度相似。学习 CNN(图像)、RNN(时序数据)、Transformer(自然语言处理)。

eso1983的博客 2127

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: YOLOv4 中的数据增强
下一篇: 如何看待2021年秋招算法岗灰飞烟灭?
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值