在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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í),肉眼竟然無法將它生成的圖像與真實(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

    文章

    1164

    瀏覽量

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

    關(guān)注

    45

    文章

    3786

    瀏覽量

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

    關(guān)注

    42

    文章

    4812

    瀏覽量

    103180

原文標(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)推薦

    零基礎(chǔ)入門:如何在樹莓派上編寫和運(yùn)行Python程序?

    是一種非常有用的編程語(yǔ)言,其語(yǔ)法易于閱讀,允許程序員使用比匯編、C或Java等語(yǔ)言更少的代碼Python編程語(yǔ)言最初實(shí)際上是作為L(zhǎng)inux的腳本語(yǔ)言而開發(fā)的。Py
    的頭像 發(fā)表于 03-25 09:27 ?600次閱讀
    零基礎(chǔ)入門:如何在樹莓派上編寫和運(yùn)行<b class='flag-5'>Python</b>程序?

    創(chuàng)建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼中獲得的結(jié)果與Python代碼不同是為什么?

    創(chuàng)建了用于OpenVINO?推理的自定義 C++ 和 Python* 代碼。 在兩個(gè)推理過程中使用相同的圖像和模型。 從 C++ 代碼中獲得的結(jié)果與 Python*
    發(fā)表于 03-06 06:22

    有沒有什么方案能實(shí)現(xiàn)直接matlab或python調(diào)用D4100_usb.dll?

    D4100_usb.dll是否有64位版本的,如果沒有,那有沒有什么方案能實(shí)現(xiàn)直接matlab或python調(diào)用D4100_usb.dll。 萬(wàn)分感謝。 以下是eclipse java
    發(fā)表于 02-27 06:59

    DLP4710配合DLPA3000、DLPC3479使用,該系統(tǒng)的供電電壓是否必須為19V嗎?

    我們的DMD是DLP4710,配合DLPA3000、DLPC3479使用。 請(qǐng)問該系統(tǒng)的供電電壓是否必須為19V? 我們的供電電源線有30米長(zhǎng),無法直接使用19V電源(長(zhǎng)距離線纜上壓降很大),請(qǐng)問有您有什么方法解決嗎?
    發(fā)表于 02-25 06:50

    重點(diǎn)能單位能耗在線監(jiān)測(cè)系統(tǒng)企業(yè)端平臺(tái)架構(gòu)與功能如何實(shí)現(xiàn)

    ,再由平臺(tái)軟件支持進(jìn)行宏觀能耗分析的一套在線信息化系統(tǒng)該系統(tǒng)主要服務(wù)于兩類用戶,各級(jí)政府節(jié)能主管部門和重點(diǎn)能單位企業(yè)。本文通過分析兩類用戶不同需求,提出建設(shè)重點(diǎn)能單位能耗在線監(jiān)測(cè)
    的頭像 發(fā)表于 02-08 10:13 ?321次閱讀
    重點(diǎn)<b class='flag-5'>用</b>能單位能耗在線監(jiān)測(cè)<b class='flag-5'>系統(tǒng)</b>企業(yè)端平臺(tái)架構(gòu)與功能如何<b class='flag-5'>實(shí)現(xiàn)</b>?

    使用Python實(shí)現(xiàn)xgboost教程

    使用Python實(shí)現(xiàn)XGBoost模型通常涉及以下幾個(gè)步驟:數(shù)據(jù)準(zhǔn)備、模型訓(xùn)練、模型評(píng)估和模型預(yù)測(cè)。以下是一個(gè)詳細(xì)的教程,指導(dǎo)你如何在Python中使用XGBoost。 1. 安裝XGBoost
    的頭像 發(fā)表于 01-19 11:21 ?1271次閱讀

    使用Python進(jìn)行串口通信的案例

    python復(fù)制代碼 import serialimport time # 配置串口參數(shù)serial_port = '/dev/ttyUSB0' # 在Windows上可能是 'COM3' 或其他類
    的頭像 發(fā)表于 11-22 09:11 ?1341次閱讀

    對(duì)比Python與Java編程語(yǔ)言

    Python與Java都是目前非常流行的編程語(yǔ)言,它們各有其獨(dú)特的優(yōu)勢(shì)和適用場(chǎng)景。以下是對(duì)這兩種編程語(yǔ)言的對(duì)比: 一、語(yǔ)法和易用性 Python 語(yǔ)法簡(jiǎn)潔,代碼更易讀,非常適合初學(xué)者。 動(dòng)態(tài)類型
    的頭像 發(fā)表于 11-15 09:31 ?971次閱讀

    使用Python進(jìn)行圖像處理

    下面是一個(gè)關(guān)于使用Python在幾行代碼中分析城市輪廓線的快速教程。
    的頭像 發(fā)表于 11-07 10:14 ?558次閱讀
    使用<b class='flag-5'>Python</b>進(jìn)行圖像處理

    TDP158配置指南

    電子發(fā)燒友網(wǎng)站提供《TDP158配置指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-19 13:27 ?0次下載
    TDP<b class='flag-5'>158</b>配置指南

    如何幫助孩子高效學(xué)習(xí)Python:開源硬件實(shí)踐是最優(yōu)選擇

    顯著提升孩子的學(xué)習(xí)興趣和對(duì)Python原理的理解。本文將探討為何使用Raspberry Pi(樹莓派)或Unihiker(空板)等開源硬件是孩子們掌握Python的最佳途徑。 讓孩子們?cè)?b class='flag-5'>Py
    的頭像 發(fā)表于 09-06 09:49 ?637次閱讀

    PDF文件批量打印源代碼

    壓縮包中包含可批量打印PDF文件的Python代碼,可以借助PYcharm工具執(zhí)行,實(shí)現(xiàn)多PDF文件同時(shí)打印。
    發(fā)表于 08-08 14:26 ?0次下載

    python寫驗(yàn)證環(huán)境cocotb

    本文介紹了cocotb的安裝、python tb文件的寫法、xrun仿真cocotb的腳本等,我們來看看體驗(yàn)如何。
    的頭像 發(fā)表于 07-24 09:38 ?986次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>python</b>寫驗(yàn)證環(huán)境cocotb

    如何實(shí)現(xiàn)Python復(fù)制文件操作

    Python 中有許多“開蓋即食”的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在這篇文章中,你將會(huì)看到一些 Python 實(shí)現(xiàn)文件復(fù)制的特殊
    的頭像 發(fā)表于 07-18 14:53 ?746次閱讀

    pycharm進(jìn)行python爬蟲的步驟

    提供了許多有用的功能,如代碼自動(dòng)完成、調(diào)試和版本控制等。您可以從JetBrains的官方網(wǎng)站下載PyCharm,并根據(jù)您的需求選擇免費(fèi)社區(qū)版或付費(fèi)專業(yè)版。 創(chuàng)建一個(gè)新的Python項(xiàng)目 打開
    的頭像 發(fā)表于 07-11 10:11 ?1400次閱讀
    主站蜘蛛池模板: 亚洲第七页 | 色婷婷综合久久久久中文一区二区 | 天天爽夜夜春 | 欧美成人全部费免网站 | bl高h文 | 日韩精品系列产品 | 美女网站色在线观看 | 精品免费久久久久久成人影院 | 午夜黄色在线观看 | 爱逼色| 欧美精品二区 | 男生女生靠逼视频 | 天天做天天爱夜夜爽 | 狠狠干天天爱 | 久久久免费精品视频 | 49pao强力在线高清基地 | 亚洲综合日韩欧美一区二区三 | 啪啪网站视频 | 久操伊人| 婷婷6月| 午夜寂寞影院视频观看 | 羞羞答答xxdd影院欧美 | 国产精品亚洲色图 | 海棠高h粗暴调教双性男男 韩国韩宝贝2020vip福利视频 | 国产午夜影院 | 免费一级毛毛片 | 国产成人啪午夜精品网站 | 天天射天天干天天 | 特级毛片免费视频观看 | 久久精品99 | 国产免费小视频 | 高清不卡免费一区二区三区 | 大又大又粗又爽又黄毛片女人 | 男女午夜剧场 | 一级毛片免费不卡在线视频 | www.九九热 | 伊人久久大香线蕉电影院 | 欧美xxxx色视频在线观看免费 | 免费v片网站 | 午夜在线观看免费视频 | 九九热在线观看 |