91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Eric Jang用158行Python代碼實(shí)現(xiàn)該系統(tǒng)的思路

DPVg_AI_era ? 來源:lq ? 2019-09-13 16:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近,谷歌 DeepMInd 發(fā)表論文提出了一個(gè)用于圖像生成的遞歸神經(jīng)網(wǎng)絡(luò),該系統(tǒng)大大提高了 MNIST 上生成模型的質(zhì)量。為更加深入了解 DRAW,本文作者基于 Eric Jang 用 158 行 Python 代碼實(shí)現(xiàn)該系統(tǒng)的思路,詳細(xì)闡述了 DRAW 的概念、架構(gòu)和優(yōu)勢(shì)等。

遞歸神經(jīng)網(wǎng)絡(luò)是一種用于圖像生成的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。Draw Networks 結(jié)合了一種新的空間注意機(jī)制,該機(jī)制模擬了人眼的中心位置,采用了一個(gè)順序變化的自動(dòng)編碼框架,使之對(duì)復(fù)雜圖像進(jìn)行迭代構(gòu)造。 該系統(tǒng)大大提高了 MNIST 上生成模型的質(zhì)量,特別是當(dāng)對(duì)街景房屋編號(hào)數(shù)據(jù)集進(jìn)行訓(xùn)練時(shí),肉眼竟然無(wú)法將它生成的圖像與真實(shí)數(shù)據(jù)區(qū)別開來。

Draw 體系結(jié)構(gòu)的核心是一對(duì)遞歸神經(jīng)網(wǎng)絡(luò):一個(gè)是壓縮用于訓(xùn)練的真實(shí)圖像的編碼器,另一個(gè)是在接收到代碼后重建圖像的解碼器。這一組合系統(tǒng)采用隨機(jī)梯度下降的端到端訓(xùn)練,損失函數(shù)的最大值變分主要取決于對(duì)數(shù)似然函數(shù)的數(shù)據(jù)。

Draw 網(wǎng)絡(luò)類似于其他變分自動(dòng)編碼器,它包含一個(gè)編碼器網(wǎng)絡(luò),該編碼器網(wǎng)絡(luò)決定著潛在代碼上的 distribution(潛在代碼主要捕獲有關(guān)輸入數(shù)據(jù)的顯著信息),解碼器網(wǎng)絡(luò)接收來自 code distribution 的樣本,并利用它們來調(diào)節(jié)其自身圖像的 distribution 。

DRAW 與其他自動(dòng)解碼器的三大區(qū)別 編碼器和解碼器都是 DRAW 中的遞歸網(wǎng)絡(luò),解碼器的輸出依次添加到 distribution 中以生成數(shù)據(jù),而不是一步一步地生成 distribution 。動(dòng)態(tài)更新的注意機(jī)制用于限制由編碼器負(fù)責(zé)的輸入?yún)^(qū)域和由解碼器更新的輸出區(qū)域 。簡(jiǎn)單地說,這一網(wǎng)絡(luò)在每個(gè) time-step 都能決定“讀到哪里”和“寫到哪里”以及“寫什么”。

左:傳統(tǒng)變分自動(dòng)編碼器 在生成過程中,從先前的 P(z)中提取一個(gè)樣本 z ,并通過前饋?zhàn)g碼器網(wǎng)絡(luò)來計(jì)算給定樣本的輸入 P(x_z)的概率。 在推理過程中,輸入 x 被傳遞到編碼器網(wǎng)絡(luò),在潛在變量上產(chǎn)生一個(gè)近似的后驗(yàn) Q(z|x) 。在訓(xùn)練過程中,從 Q(z|x) 中抽取 z,然后用它計(jì)算總描述長(zhǎng)度 KL ( Q (Z|x)∣∣ P(Z)?log(P(x|z)),該長(zhǎng)度隨隨機(jī)梯度的下降(https://en.wikipedia.org/wiki/Stochastic_gradient_descent)而減小至最小值。

右:DRAW網(wǎng)絡(luò) 在每一個(gè)步驟中,都會(huì)將先前 P(z)中的一個(gè)樣本 z_t 傳遞給遞歸解碼器網(wǎng)絡(luò),該網(wǎng)絡(luò)隨后會(huì)修改 canvas matrix 的一部分。最后一個(gè) canvas matrix cT 用于計(jì)算 P(x|z_1:t)。 在推理過程中,每個(gè) time-step 都會(huì)讀取輸入,并將結(jié)果傳遞給編碼器 RNN,然后從上一 time-step 中的 RNN 指定讀取位置,編碼器 RNN 的輸出用于計(jì)算該 time-step 的潛在變量的近似后驗(yàn)值。 損失函數(shù) 最后一個(gè) canvas matrix cT 用于確定輸入數(shù)據(jù)的模型 D(X | cT)的參數(shù)。如果輸入是二進(jìn)制的,D 的自然選擇呈伯努利分布,means 由σ(cT) 給出。重建損失 Lx 定義為 D 下 x 的負(fù)對(duì)數(shù)概率:? ? ? ? ? The latent loss 潛在distributions序列??的潛在損失?被定義為源自??

的潛在先驗(yàn) P(Z_t)的簡(jiǎn)要 KL散度。 鑒于這一損失取決于由??繪制的潛在樣本 z_t ,因此其反過來又決定了輸入 x。如果潛在 distribution是一個(gè)?這樣的 diagonal Gaussian ,P(Z_t) 便是一個(gè)均值為 0,且具有標(biāo)準(zhǔn)離差的標(biāo)準(zhǔn) Gaussian,這種情況下方程則變?yōu)??

。 網(wǎng)絡(luò)的總損失 L 是重建和潛在損失之和的期望值:?? ? ? ? 對(duì)于每個(gè)隨機(jī)梯度下降,我們使用單個(gè) z 樣本進(jìn)行優(yōu)化。 ? L^Z 可以解釋為從之前的序列向解碼器傳輸潛在樣本序列 z_1:T 所需的 NAT 數(shù)量,并且(如果 x 是離散的)L^x 是解碼器重建給定 z_1:T 的 x 所需的 NAT 數(shù)量。因此,總損失等于解碼器和之前數(shù)據(jù)的預(yù)期壓縮量。 ? 改善圖片 ? 正如 EricJang 在他的文章中提到的,讓我們的神經(jīng)網(wǎng)絡(luò)僅僅“改善圖像”而不是“一次完成圖像”會(huì)更容易些。正如人類藝術(shù)家在畫布上涂涂畫畫,并從繪畫過程中推斷出要修改什么,以及下一步要繪制什么。 ? 改進(jìn)圖像或逐步細(xì)化只是一次又一次地破壞我們的聯(lián)合 distribution P(C)?,導(dǎo)致潛在變量鏈 C1,C2,…CT?1 呈現(xiàn)新的變量分布 P(CT) 。 ? ? ??

訣竅是多次從迭代細(xì)化分布 P(Ct|Ct?1)中取樣,而不是直接從 P(C) 中取樣。 在 DRAW 模型中,P(Ct|Ct?1) 是所有 t 的同一 distribution,因此我們可以將其表示為以下遞歸關(guān)系(如果不是,那么就是Markov Chain而不是遞歸網(wǎng)絡(luò)了)。

DRAW模型的實(shí)際應(yīng)用 假設(shè)你正在嘗試對(duì)數(shù)字 8 的圖像進(jìn)行編碼。每個(gè)手寫數(shù)字的繪制方式都不同,有的樣本 8 可能看起來寬一些,有的可能長(zhǎng)一些。如果不注意,編碼器將被迫同時(shí)捕獲所有這些小的差異。

但是……如果編碼器可以在每一幀上選擇一小段圖像并一次檢查數(shù)字 8 的每一部分呢?這會(huì)使工作更容易,對(duì)吧?

同樣的邏輯也適用于生成數(shù)字。注意力單元將決定在哪里繪制數(shù)字 8 的下一部分-或任何其他部分-而傳遞的潛在矢量將決定解碼器生成多大的區(qū)域。 基本上,如果我們把變分的自動(dòng)編碼器(VAE)中的潛在代碼看作是表示整個(gè)圖像的矢量,那么繪圖中的潛在代碼就可以看作是表示筆畫的矢量。最后,這些向量的序列實(shí)現(xiàn)了原始圖像的再現(xiàn)。

好吧,那么它是如何工作的呢?

在一個(gè)遞歸的 VAE 模型中,編碼器在每一個(gè) timestep 會(huì)接收整個(gè)輸入圖像。在 Draw 中,我們需要將焦點(diǎn)集中在它們之間的 attention gate 上,因此編碼器只接收到網(wǎng)絡(luò)認(rèn)為在該 timestep 重要的圖像部分。第一個(gè) attention gate 被稱為“Read”attention。 “Read”attention分為兩部分: 選擇圖像的重要部分和裁剪圖像

選擇圖像的重要部分 為了確定圖像的哪一部分最重要,我們需要做些觀察,并根據(jù)這些觀察做出決定。在 DRAW中,我們使用前一個(gè) timestep 的解碼器隱藏狀態(tài)。通過使用一個(gè)簡(jiǎn)單的完全連接的圖層,我們可以將隱藏狀態(tài)映射到三個(gè)決定方形裁剪的參數(shù):中心 X、中心 Y 和比例。

裁剪圖像 現(xiàn)在,我們不再對(duì)整個(gè)圖像進(jìn)行編碼,而是對(duì)其進(jìn)行裁剪,只對(duì)圖像的一小部分進(jìn)行編碼。然后,這個(gè)編碼通過系統(tǒng)解碼成一個(gè)小補(bǔ)丁。 現(xiàn)在我們到達(dá) attention gate 的第二部分,“write”attention,(與“read”部分的設(shè)置相同),只是“write”attention 使用當(dāng)前的解碼器,而不是前一個(gè) timestep 的解碼器。

雖然可以直觀地將注意力機(jī)制描述為一種裁剪,但實(shí)踐中使用了一種不同的方法。在上面描述的模型結(jié)構(gòu)仍然精確的前提下,使用了gaussian filters矩陣,沒有利用裁剪的方式。我們?cè)贒RAW 中取了一組每個(gè) filter 的中心間距都均勻的gaussian filters 矩陣。 代碼一覽 我們?cè)?Eric Jang 的代碼的基礎(chǔ)上,對(duì)其進(jìn)行一些清理和注釋,以便于理解.

# first we import our librariesimport tensorflow as tffrom tensorflow.examples.tutorials import mnistfrom tensorflow.examples.tutorials.mnist import input_dataimport numpy as npimport scipy.miscimport os Eric 為我們提供了一些偉大的功能,可以幫助我們構(gòu)建 “read” 和 “write” 注意門徑,還有過濾我們將使用的初始狀態(tài)功能,但是首先,我們需要添加新的功能,來使我們能創(chuàng)建一個(gè)密集層并合并圖像。并將它們保存到本地計(jì)算機(jī)中,以獲取更新的代碼。

# fully-conected layerdef dense(x, inputFeatures, outputFeatures, scope=None, with_w=False): with tf.variable_scope(scope or "Linear"): matrix = tf.get_variable("Matrix", [inputFeatures, outputFeatures], tf.float32, tf.random_normal_initializer(stddev=0.02)) bias = tf.get_variable("bias", [outputFeatures], initializer=tf.constant_initializer(0.0)) if with_w: return tf.matmul(x, matrix) + bias, matrix, bias else: return tf.matmul(x, matrix) + bias # merge imagesdef merge(images, size): h, w = images.shape[1], images.shape[2] img = np.zeros((h * size[0], w * size[1])) for idx, image in enumerate(images): i = idx % size[1] j = idx / size[1] img[j*h:j*h+h, i*w:i*w+w] = image return img # save image on local machine def ims(name, img): # print img[:10][:10]scipy.misc.toimage(img,cmin=0,cmax=1).save(name) 現(xiàn)在讓我們把代碼放在一起以便完成。

# DRAW implementationclass draw_model(): def __init__(self): # First we download the MNIST dataset into our local machine. self.mnist = input_data.read_data_sets("data/", one_hot=True) print "------------------------------------" print "MNIST Dataset Succesufully Imported" print "------------------------------------" self.n_samples = self.mnist.train.num_examples # We set up the model parameters # ------------------------------ # image width,height self.img_size = 28 # read glimpse grid width/height self.attention_n = 5 # number of hidden units / output size in LSTM self.n_hidden = 256 # QSampler output size self.n_z = 10 # MNIST generation sequence length self.sequence_length = 10 # training minibatch size self.batch_size = 64 # workaround for variable_scope(reuse=True) self.share_parameters = False # Build our model self.images = tf.placeholder(tf.float32, [None, 784]) # input (batch_size * img_size) self.e = tf.random_normal((self.batch_size, self.n_z), mean=0, stddev=1) # Qsampler noise self.lstm_enc = tf.nn.rnn_cell.LSTMCell(self.n_hidden, state_is_tuple=True) # encoder Op self.lstm_dec = tf.nn.rnn_cell.LSTMCell(self.n_hidden, state_is_tuple=True) # decoder Op # Define our state variables self.cs = [0] * self.sequence_length # sequence of canvases self.mu, self.logsigma, self.sigma = [0] * self.sequence_length, [0] * self.sequence_length, [0] * self.sequence_length # Initial states h_dec_prev = tf.zeros((self.batch_size, self.n_hidden)) enc_state = self.lstm_enc.zero_state(self.batch_size, tf.float32) dec_state = self.lstm_dec.zero_state(self.batch_size, tf.float32) # Construct the unrolled computational graph x = self.images for t in range(self.sequence_length): # error image + original image c_prev = tf.zeros((self.batch_size, self.img_size**2)) if t == 0 else self.cs[t-1] x_hat = x - tf.sigmoid(c_prev) # read the image r = self.read_basic(x,x_hat,h_dec_prev) #sanity check print r.get_shape() # encode to guass distribution self.mu[t], self.logsigma[t], self.sigma[t], enc_state = self.encode(enc_state, tf.concat(1, [r, h_dec_prev])) # sample from the distribution to get z z = self.sampleQ(self.mu[t],self.sigma[t]) #sanity check print z.get_shape() # retrieve the hidden layer of RNN h_dec, dec_state = self.decode_layer(dec_state, z) #sanity check print h_dec.get_shape() # map from hidden layer self.cs[t] = c_prev + self.write_basic(h_dec) h_dec_prev = h_dec self.share_parameters = True # from now on, share variables # Loss function self.generated_images = tf.nn.sigmoid(self.cs[-1]) self.generation_loss = tf.reduce_mean(-tf.reduce_sum(self.images * tf.log(1e-10 + self.generated_images) + (1-self.images) * tf.log(1e-10 + 1 - self.generated_images),1)) kl_terms = [0]*self.sequence_length for t in xrange(self.sequence_length): mu2 = tf.square(self.mu[t]) sigma2 = tf.square(self.sigma[t]) logsigma = self.logsigma[t] kl_terms[t] = 0.5 * tf.reduce_sum(mu2 + sigma2 - 2*logsigma, 1) - self.sequence_length*0.5 # each kl term is (1xminibatch) self.latent_loss = tf.reduce_mean(tf.add_n(kl_terms)) self.cost = self.generation_loss + self.latent_loss # Optimization optimizer = tf.train.AdamOptimizer(1e-3, beta1=0.5) grads = optimizer.compute_gradients(self.cost) for i,(g,v) in enumerate(grads): if g is not None: grads[i] = (tf.clip_by_norm(g,5),v) self.train_op = optimizer.apply_gradients(grads) self.sess = tf.Session() self.sess.run(tf.initialize_all_variables()) # Our training function def train(self): for i in xrange(20000): xtrain, _ = self.mnist.train.next_batch(self.batch_size) cs, gen_loss, lat_loss, _ = self.sess.run([self.cs, self.generation_loss, self.latent_loss, self.train_op], feed_dict={self.images: xtrain}) print "iter %d genloss %f latloss %f" % (i, gen_loss, lat_loss) if i % 500 == 0: cs = 1.0/(1.0+np.exp(-np.array(cs))) # x_recons=sigmoid(canvas) for cs_iter in xrange(10): results = cs[cs_iter] results_square = np.reshape(results, [-1, 28, 28]) print results_square.shape ims("results/"+str(i)+"-step-"+str(cs_iter)+".jpg",merge(results_square,[8,8])) # Eric Jang's main functions # -------------------------- # locate where to put attention filters on hidden layers def attn_window(self, scope, h_dec): with tf.variable_scope(scope, reuse=self.share_parameters): parameters = dense(h_dec, self.n_hidden, 5) # center of 2d gaussian on a scale of -1 to 1 gx_, gy_, log_sigma2, log_delta, log_gamma = tf.split(1,5,parameters) # move gx/gy to be a scale of -imgsize to +imgsize gx = (self.img_size+1)/2 * (gx_ + 1) gy = (self.img_size+1)/2 * (gy_ + 1) sigma2 = tf.exp(log_sigma2) # distance between patches delta = (self.img_size - 1) / ((self.attention_n-1) * tf.exp(log_delta)) # returns [Fx, Fy, gamma] return self.filterbank(gx,gy,sigma2,delta) + (tf.exp(log_gamma),) # Construct patches of gaussian filters def filterbank(self, gx, gy, sigma2, delta): # 1 x N, look like [[0,1,2,3,4]] grid_i = tf.reshape(tf.cast(tf.range(self.attention_n), tf.float32),[1, -1]) # individual patches centers mu_x = gx + (grid_i - self.attention_n/2 - 0.5) * delta mu_y = gy + (grid_i - self.attention_n/2 - 0.5) * delta mu_x = tf.reshape(mu_x, [-1, self.attention_n, 1]) mu_y = tf.reshape(mu_y, [-1, self.attention_n, 1]) # 1 x 1 x imgsize, looks like [[[0,1,2,3,4,...,27]]] im = tf.reshape(tf.cast(tf.range(self.img_size), tf.float32), [1, 1, -1]) # list of gaussian curves for x and y sigma2 = tf.reshape(sigma2, [-1, 1, 1]) Fx = tf.exp(-tf.square((im - mu_x) / (2*sigma2))) Fy = tf.exp(-tf.square((im - mu_x) / (2*sigma2))) # normalize area-under-curve Fx = Fx / tf.maximum(tf.reduce_sum(Fx,2,keep_dims=True),1e-8) Fy = Fy / tf.maximum(tf.reduce_sum(Fy,2,keep_dims=True),1e-8) return Fx, Fy # read operation without attention def read_basic(self, x, x_hat, h_dec_prev): return tf.concat(1,[x,x_hat]) # read operation with attention def read_attention(self, x, x_hat, h_dec_prev): Fx, Fy, gamma = self.attn_window("read", h_dec_prev) # apply parameters for patch of gaussian filters def filter_img(img, Fx, Fy, gamma): Fxt = tf.transpose(Fx, perm=[0,2,1]) img = tf.reshape(img, [-1, self.img_size, self.img_size]) # apply the gaussian patches glimpse = tf.batch_matmul(Fy, tf.batch_matmul(img, Fxt)) glimpse = tf.reshape(glimpse, [-1, self.attention_n**2]) # scale using the gamma parameter return glimpse * tf.reshape(gamma, [-1, 1]) x = filter_img(x, Fx, Fy, gamma) x_hat = filter_img(x_hat, Fx, Fy, gamma) return tf.concat(1, [x, x_hat]) # encoder function for attention patch def encode(self, prev_state, image): # update the RNN with our image with tf.variable_scope("encoder",reuse=self.share_parameters): hidden_layer, next_state = self.lstm_enc(image, prev_state) # map the RNN hidden state to latent variables with tf.variable_scope("mu", reuse=self.share_parameters): mu = dense(hidden_layer, self.n_hidden, self.n_z) with tf.variable_scope("sigma", reuse=self.share_parameters): logsigma = dense(hidden_layer, self.n_hidden, self.n_z) sigma = tf.exp(logsigma) return mu, logsigma, sigma, next_state def sampleQ(self, mu, sigma): return mu + sigma*self.e # decoder function def decode_layer(self, prev_state, latent): # update decoder RNN using our latent variable with tf.variable_scope("decoder", reuse=self.share_parameters): hidden_layer, next_state = self.lstm_dec(latent, prev_state) return hidden_layer, next_state # write operation without attention def write_basic(self, hidden_layer): # map RNN hidden state to image with tf.variable_scope("write", reuse=self.share_parameters): decoded_image_portion = dense(hidden_layer, self.n_hidden, self.img_size**2) return decoded_image_portion # write operation with attention def write_attention(self, hidden_layer): with tf.variable_scope("writeW", reuse=self.share_parameters): w = dense(hidden_layer, self.n_hidden, self.attention_n**2) w = tf.reshape(w, [self.batch_size, self.attention_n, self.attention_n]) Fx, Fy, gamma = self.attn_window("write", hidden_layer) Fyt = tf.transpose(Fy, perm=[0,2,1]) wr = tf.batch_matmul(Fyt, tf.batch_matmul(w, Fx)) wr = tf.reshape(wr, [self.batch_size, self.img_size**2]) return wr * tf.reshape(1.0/gamma, [-1, 1]) model = draw_mod

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 解碼器
    +關(guān)注

    關(guān)注

    9

    文章

    1224

    瀏覽量

    43629
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3984

    瀏覽量

    143053
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4839

    瀏覽量

    107995

原文標(biāo)題:158行代碼!程序員復(fù)現(xiàn)DeepMind圖像生成神器

文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    無(wú)法去除 Python VisionFive.i2c 庫(kù)的終端輸出?

    燒的官方最新八月份的 debian 12 的系統(tǒng)。 根據(jù)這個(gè)案例安裝好了 python 環(huán)境和 VisionFive 庫(kù)。 執(zhí)行下面這條代碼: import VisionFive.i2c
    發(fā)表于 02-25 06:13

    Python運(yùn)行本地Web服務(wù)并實(shí)現(xiàn)遠(yuǎn)程訪問

    本文介紹使用Python搭建本地Web服務(wù)并結(jié)合 ZeroNews 實(shí)現(xiàn)公網(wǎng)訪問。
    的頭像 發(fā)表于 02-06 11:39 ?224次閱讀
    <b class='flag-5'>Python</b>運(yùn)行本地Web服務(wù)并<b class='flag-5'>實(shí)現(xiàn)</b>遠(yuǎn)程訪問

    京東關(guān)鍵詞搜索商品列表的Python爬蟲實(shí)戰(zhàn)

    京東關(guān)鍵詞搜索商品列表 Python 爬蟲實(shí)戰(zhàn) 你想要實(shí)現(xiàn)京東關(guān)鍵詞搜索商品的爬蟲,我會(huì)從 合規(guī)聲明、環(huán)境準(zhǔn)備、頁(yè)面分析、代碼實(shí)現(xiàn)、反爬優(yōu)化 五個(gè)方面展開,幫助你完成實(shí)戰(zhàn)項(xiàng)目。 一、前
    的頭像 發(fā)表于 01-04 10:16 ?970次閱讀

    Python中借助NVIDIA CUDA Tile簡(jiǎn)化GPU編程

    模型更高的層級(jí)來實(shí)現(xiàn)算法。至于如何將計(jì)算任務(wù)拆分到各個(gè)線程,完全由編譯器和運(yùn)行時(shí)在底層自動(dòng)處理。不僅如此,tile kernels 還能夠屏蔽 Tensor Core 等專用硬件的細(xì)節(jié),寫出的代碼還能
    的頭像 發(fā)表于 12-13 10:12 ?1283次閱讀
    在<b class='flag-5'>Python</b>中借助NVIDIA CUDA Tile簡(jiǎn)化GPU編程

    Termux中調(diào)試圣誕樹Python代碼

    python --version 如果輸出Python 3.x.x(比如3.11.4),說明安裝成功。 二、代碼編寫(兩種方式可選) 方式1:Termux自帶編輯器(nano
    發(fā)表于 12-09 09:02

    labview如何實(shí)現(xiàn)數(shù)據(jù)的采集與實(shí)時(shí)預(yù)測(cè)

    現(xiàn)有以下問題:labview可以實(shí)現(xiàn)數(shù)據(jù)的采集以及調(diào)用python代碼,但如何將這兩項(xiàng)功能集成在一個(gè)VI文件里,從而實(shí)現(xiàn)數(shù)據(jù)的采集與實(shí)時(shí)預(yù)測(cè)。現(xiàn)有條件如下:已完成數(shù)據(jù)的采集
    發(fā)表于 12-03 21:13

    JY-ULP-158+低通濾波器:DC-158MHz頻段的“低頻信號(hào)守門人”——技術(shù)與應(yīng)用深度解析

    在射頻電子系統(tǒng)中,低通濾波器是實(shí)現(xiàn)低頻信號(hào)提純、抑制高頻雜波的核心器件。杰盈通訊推出的JY-ULP-158+低通濾波器,采用LC電路拓?fù)湓O(shè)計(jì),憑借“高抑制比、超小型封裝、寬溫穩(wěn)定性”的技術(shù)優(yōu)勢(shì),在
    的頭像 發(fā)表于 11-13 14:15 ?443次閱讀
    JY-ULP-<b class='flag-5'>158</b>+低通濾波器:DC-<b class='flag-5'>158</b>MHz頻段的“低頻信號(hào)守門人”——技術(shù)與應(yīng)用深度解析

    Python調(diào)用API教程

    兩個(gè)不同系統(tǒng)之間的信息交互。在這篇文章中,我們將詳細(xì)介紹Python調(diào)用API的方法和技巧。 一、Requests庫(kù)發(fā)送HTTP請(qǐng)求 使用Python調(diào)用API的第一步是發(fā)送HTTP
    的頭像 發(fā)表于 11-03 09:15 ?1021次閱讀

    Python 給 Amazon 做“全身 CT”——可量產(chǎn)、可擴(kuò)展的商品詳情爬蟲實(shí)戰(zhàn)

    一、技術(shù)選型:為什么選 Python 而不是 Java? 結(jié)論: “調(diào)研階段 Python,上線后如果 QPS 爆表再考慮 Java 重構(gòu)?!?二、整體架構(gòu)速覽(3 分鐘看懂) 三、開發(fā)前準(zhǔn)備(5
    的頭像 發(fā)表于 10-21 16:59 ?565次閱讀
    <b class='flag-5'>用</b> <b class='flag-5'>Python</b> 給 Amazon 做“全身 CT”——可量產(chǎn)、可擴(kuò)展的商品詳情爬蟲實(shí)戰(zhàn)

    一文解讀華為自動(dòng)駕駛布局之鴻蒙智

    鴻蒙智代表了一種新的產(chǎn)業(yè)協(xié)作思路軟件和算力把傳統(tǒng)整車與新興數(shù)字能力結(jié)合,通過平臺(tái)化、模塊化的技術(shù)路線來支持快速迭代和規(guī)?;桓?。
    的頭像 發(fā)表于 10-19 10:38 ?2466次閱讀
    一文解讀華為自動(dòng)駕駛布局之鴻蒙智<b class='flag-5'>行</b>

    淘寶商品詳情接口(item_get)企業(yè)級(jí)全解析:參數(shù)配置、簽名機(jī)制與 Python 代碼實(shí)戰(zhàn)

    本文詳解淘寶開放平臺(tái)taobao.item_get接口對(duì)接全流程,涵蓋參數(shù)配置、MD5簽名生成、Python企業(yè)級(jí)代碼實(shí)現(xiàn)及高頻問題排查,提供可落地的實(shí)戰(zhàn)方案,助你高效穩(wěn)定獲取商品數(shù)據(jù)。
    的頭像 發(fā)表于 09-26 09:13 ?992次閱讀
    淘寶商品詳情接口(item_get)企業(yè)級(jí)全解析:參數(shù)配置、簽名機(jī)制與 <b class='flag-5'>Python</b> <b class='flag-5'>代碼</b>實(shí)戰(zhàn)

    FS158輕松升級(jí)DCDC協(xié)議芯片:外圍精簡(jiǎn)+耐壓提升一步到位

    在硬件研發(fā)與產(chǎn)品迭代中,協(xié)議芯片的升級(jí)往往面臨“改板麻煩、外圍元件多、耐壓不足”等痛點(diǎn)。今天就為大家分享一個(gè)高效方案:FS158直接升級(jí)替代傳統(tǒng)FS112腳位協(xié)議芯片,無(wú)需改動(dòng)PCB板,還能實(shí)現(xiàn)
    的頭像 發(fā)表于 09-22 16:51 ?1250次閱讀
    <b class='flag-5'>用</b>FS<b class='flag-5'>158</b>輕松升級(jí)DCDC協(xié)議芯片:外圍精簡(jiǎn)+耐壓提升一步到位

    termux調(diào)試python猜數(shù)字游戲

    termux做一個(gè)猜數(shù)字游戲 下面是在Termux中創(chuàng)建猜數(shù)字游戲的步驟及完整實(shí)現(xiàn)方案,結(jié)合Python實(shí)現(xiàn)(最適配Termux環(huán)境): ? 一、環(huán)境準(zhǔn)備(Termux基礎(chǔ)
    發(fā)表于 08-29 17:15

    termux如何搭建python游戲

    VS Code編輯 - 版本控制:`git`管理代碼,同步至GitHub/Gitee - 任務(wù)調(diào)度:通過`crontab`設(shè)置定時(shí)測(cè)試(如每分鐘運(yùn)行游戲腳本:`*/1 * * * * python
    發(fā)表于 08-29 07:06

    python入門圣經(jīng)-高清電子書(建議下載)

    此資料內(nèi)容是一本針對(duì)所有層次的Python 讀者而作的Python 入門電子書。 全書分兩部分:第一部分介紹Python 編程所必須了解的基本概念,包括matplotlib、NumP
    發(fā)表于 04-10 16:53