偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

使用機(jī)器學(xué)習(xí)生成圖像描述

人工智能 機(jī)器學(xué)習(xí)
圖像描述是為圖像提供適當(dāng)文字描述的過(guò)程。 作為人類,這似乎是一件容易的任務(wù),即使是五歲的孩子也可以輕松完成,但是我們?nèi)绾尉帉?xiě)一個(gè)將輸入作為圖像并生成標(biāo)題作為輸出的計(jì)算機(jī)程序呢?

在深度神經(jīng)網(wǎng)絡(luò)的最新發(fā)展之前,業(yè)內(nèi)最聰明的人都無(wú)法解決這個(gè)問(wèn)題,但是在深度神經(jīng)網(wǎng)絡(luò)問(wèn)世之后,考慮到我們擁有所需的數(shù)據(jù)集,這樣做是完全有可能的。

例如,網(wǎng)絡(luò)模型可以生成與下圖相關(guān)的以下任何標(biāo)題,即“A white dog in a grassy area”,“white dog with brown spots”甚至“A dog on grass and some pink flowers ”。

[[395666]]

數(shù)據(jù)集

我們選擇的數(shù)據(jù)集為“ Flickr 8k”。 我們之所以選擇此數(shù)據(jù),是因?yàn)樗子谠L問(wèn)且具有可以在普通PC上進(jìn)行訓(xùn)練的完美大小,也足夠訓(xùn)練網(wǎng)絡(luò)生成適當(dāng)?shù)臉?biāo)題。 數(shù)據(jù)分為三組,主要是包含6k圖像的訓(xùn)練集,包含1k圖像的開(kāi)發(fā)集和包含1k圖像的測(cè)試集。 每個(gè)圖像包含5個(gè)標(biāo)題。 示例之一如下:

使用機(jī)器學(xué)習(xí)生成圖像描述

A child in a pink dress is climbing up a set of stairs in an entryway.

A girl going into a wooden building.

A little girl climbing into a wooden playhouse.

A little girl climbing the stairs to her playhouse.

A little girl in a pink dress going into a wooden cabin.

數(shù)據(jù)清理

任何機(jī)器學(xué)習(xí)程序的第一步也是最重要的一步是清理數(shù)據(jù)并清除所有不需要的數(shù)據(jù)。在處理標(biāo)題中的文本數(shù)據(jù)時(shí),我們將執(zhí)行基本的清理步驟,例如將計(jì)算機(jī)中的所有字母都轉(zhuǎn)換為小寫(xiě)字母“ Hey”和“ hey”是兩個(gè)完全不同的單詞,刪除特殊標(biāo)記和標(biāo)點(diǎn)符號(hào),例如*, (,£,$,%等),并消除所有包含數(shù)字的單詞。

我們首先為數(shù)據(jù)集中的所有唯一內(nèi)容創(chuàng)建詞匯表,即8000(圖片數(shù)量)* 5(每個(gè)圖像的標(biāo)題)= 40000標(biāo)題。我們發(fā)現(xiàn)它等于8763。但是這些詞中的大多數(shù)只出現(xiàn)了1到2次,我們不希望它們出現(xiàn)在我們的模型中,因?yàn)檫@不會(huì)使我們的模型對(duì)異常值具有魯棒性。因此,我們將詞匯中包含的單詞的最少出現(xiàn)次數(shù)設(shè)置為10個(gè)閾值,該閾值等于1652個(gè)唯一單詞。

我們要做的另一件事是在每個(gè)描述中添加兩個(gè)標(biāo)記,以指示字幕的開(kāi)始和結(jié)束。這兩個(gè)標(biāo)記分別是“ startseq”和“ endseq”,分別表示字幕的開(kāi)始和結(jié)尾。

首先,導(dǎo)入所有必需的庫(kù):

  1. import numpy as np   
  2. from numpy import array   
  3. import pandas as pd   
  4. import matplotlib.pyplot as plt   
  5. import string   
  6. import os   
  7. from PIL import Image   
  8. import glob   
  9. import pickle   
  10. from time import time   
  11. from keras.preprocessing import sequence   
  12. from keras.models import Sequential   
  13. from keras.layers import LSTM, Embedding, Dense, Flatten, Reshape, concatenate, Dropout   
  14. from keras.optimizers import Adam   
  15. from keras.layers.merge import add   
  16. from keras.applications.inception_v3 import InceptionV3   
  17. from keras.preprocessing import image   
  18. from keras.models import Model   
  19. from keras import Input, layers   
  20. from keras.applications.inception_v3 import preprocess_input   
  21. from keras.preprocessing.sequence import pad_sequences   
  22. from keras.utils import to_categorical  

讓我們定義一些輔助函數(shù):

  1. load descriptions   
  2. def load_doc(filename):   
  3. file = open(filename, 'r')   
  4. text = file.read()   
  5. file.close()   
  6. return text   
  7.   
  8.   
  9. def load_descriptions(doc):   
  10. mapping = dict()   
  11. for line in doc.split('\n'):   
  12. tokens = line.split()   
  13. if len(line) < 2:   
  14. continue   
  15. image_id, image_desc = tokens[0], tokens[1:]   
  16. image_id = image_id.split('.')[0]   
  17. image_desc = ' '.join(image_desc)   
  18. if image_id not in mapping:   
  19. mapping[image_id] = list()   
  20. mapping[image_id].append(image_desc)   
  21. return mapping   
  22.   
  23. def clean_descriptions(descriptions):   
  24. table = str.maketrans('''', string.punctuation)   
  25. for key, desc_list in descriptions.items():   
  26. for i in range(len(desc_list)):   
  27. desc = desc_list[i]   
  28. desc = desc.split()   
  29. desc = [word.lower() for word in desc]   
  30. desc = [w.translate(tablefor w in desc]   
  31. desc = [word for word in desc if len(word)>1]   
  32. desc = [word for word in desc if word.isalpha()]   
  33. desc_list[i] = ' '.join(desc)   
  34.   
  35. return descriptions   
  36.   
  37. # save descriptions to file, one per line   
  38. def save_descriptions(descriptions, filename):   
  39. lines = list()   
  40. for key, desc_list in descriptions.items():   
  41. for desc in desc_list:   
  42. lines.append(key + ' ' + desc)   
  43. data = '\n'.join(lines)   
  44. file = open(filename, 'w')   
  45. file.write(data)   
  46. file.close()   
  47.   
  48.   
  49. load clean descriptions into memory   
  50. def load_clean_descriptions(filename, dataset):   
  51. doc = load_doc(filename)   
  52. descriptions = dict()   
  53. for line in doc.split('\n'):   
  54. tokens = line.split()   
  55. image_id, image_desc = tokens[0], tokens[1:]   
  56. if image_id in dataset:   
  57. if image_id not in descriptions:   
  58. descriptions[image_id] = list()   
  59. desc = 'startseq ' + ' '.join(image_desc) + ' endseq'   
  60. descriptions[image_id].append(desc)   
  61. return descriptions   
  62.   
  63. def load_set(filename):   
  64. doc = load_doc(filename)   
  65. dataset = list()   
  66. for line in doc.split('\n'):   
  67. if len(line) < 1:   
  68. continue   
  69. identifier = line.split('.')[0]   
  70. dataset.append(identifier)   
  71. return set(dataset)   
  72.   
  73. load training dataset   
  74.   
  75.   
  76. filename = "dataset/Flickr8k_text/Flickr8k.token.txt"   
  77. doc = load_doc(filename)   
  78. descriptions = load_descriptions(doc)   
  79. descriptions = clean_descriptions(descriptions)   
  80. save_descriptions(descriptions, 'descriptions.txt')   
  81. filename = 'dataset/Flickr8k_text/Flickr_8k.trainImages.txt'   
  82. train = load_set(filename)   
  83. train_descriptions = load_clean_descriptions('descriptions.txt', train)  

讓我們一一解釋:

load_doc:獲取文件的路徑并返回該文件內(nèi)的內(nèi)容

load_descriptions:獲取包含描述的文件的內(nèi)容,并生成一個(gè)字典,其中以圖像id為鍵,以描述為值列表

clean_descriptions:通過(guò)將所有字母都轉(zhuǎn)換為小寫(xiě)字母,忽略數(shù)字和標(biāo)點(diǎn)符號(hào)以及僅包含一個(gè)字符的單詞來(lái)清理描述

save_descriptions:將描述字典作為文本文件保存到內(nèi)存中

load_set:從文本文件加載圖像的所有唯一標(biāo)識(shí)符

load_clean_descriptions:使用上面提取的唯一標(biāo)識(shí)符加載所有已清理的描述

數(shù)據(jù)預(yù)處理

接下來(lái),我們對(duì)圖像和字幕進(jìn)行一些數(shù)據(jù)預(yù)處理。 圖像基本上是我們的特征向量,即我們對(duì)網(wǎng)絡(luò)的輸入。 因此,我們需要先將它們轉(zhuǎn)換為固定大小的向量,然后再將其傳遞到神經(jīng)網(wǎng)絡(luò)中。 為此,我們使用了由Google Research [3]創(chuàng)建的Inception V3模型(卷積神經(jīng)網(wǎng)絡(luò))進(jìn)行遷移學(xué)習(xí)。 該模型在'ImageNet'數(shù)據(jù)集[4]上進(jìn)行了訓(xùn)練,可以對(duì)1000張圖像進(jìn)行圖像分類,但是我們的目標(biāo)不是進(jìn)行分類,因此我們刪除了最后一個(gè)softmax層,并為每張圖像提取了2048個(gè)固定矢量,如圖所示 以下:

使用機(jī)器學(xué)習(xí)生成圖像描述

標(biāo)題文字是我們模型的輸出,即我們必須預(yù)測(cè)的內(nèi)容。 但是預(yù)測(cè)并不會(huì)一次全部發(fā)生,而是會(huì)逐字預(yù)測(cè)字幕。 為此,我們需要將每個(gè)單詞編碼為固定大小的向量(將在下一部分中完成)。 為此,我們首先需要?jiǎng)?chuàng)建兩個(gè)字典,即“單詞到索引”將每個(gè)單詞映射到一個(gè)索引(在我們的情況下為1到1652),以及“索引到單詞”將字典將每個(gè)索引 映射到其對(duì)應(yīng)的單詞字典。 我們要做的最后一件事是計(jì)算在數(shù)據(jù)集中具有最大長(zhǎng)度的描述的長(zhǎng)度,以便我們可以填充所有其他內(nèi)容以保持固定長(zhǎng)度。 在我們的情況下,該長(zhǎng)度等于34。

字詞嵌入

如前所述,我們將每個(gè)單詞映射到固定大小的向量(即200)中,我們將使用預(yù)訓(xùn)練的GLOVE模型。 最后,我們?yōu)樵~匯表中的所有1652個(gè)單詞創(chuàng)建一個(gè)嵌入矩陣,其中為詞匯表中的每個(gè)單詞包含一個(gè)固定大小的向量。

  1. Create a list of all the training captions   
  2. all_train_captions = []   
  3. for key, val in train_descriptions.items():   
  4. for cap in val:   
  5. all_train_captions.append(cap)   
  6.   
  7.   
  8. # Consider only words which occur at least 10 times in the corpus   
  9. word_count_threshold = 10   
  10. word_counts = {}   
  11. nsents = 0   
  12. for sent in all_train_captions:   
  13. nsents += 1   
  14. for w in sent.split(' '):   
  15. word_counts[w] = word_counts.get(w, 0) + 1   
  16.   
  17. vocab = [w for w in word_counts if word_counts[w] >= word_count_threshold]   
  18. print('Preprocessed words {} -> {}'.format(len(word_counts), len(vocab)))   
  19.   
  20.   
  21. ixtoword = {}   
  22. wordtoix = {}   
  23.   
  24. ix = 1   
  25. for w in vocab:   
  26. wordtoix[w] = ix   
  27. ixtoword[ix] = w   
  28. ix += 1   
  29.   
  30. vocab_size = len(ixtoword) + 1 # one for appended 0's   
  31.   
  32. Load Glove vectors   
  33. glove_dir = 'glove.6B'   
  34. embeddings_index = {}   
  35. f = open(os.path.join(glove_dir, 'glove.6B.200d.txt'), encoding="utf-8")   
  36.   
  37. for line in f:   
  38. values = line.split()   
  39. word = values[0]   
  40. coefs = np.asarray(values[1:], dtype='float32')   
  41. embeddings_index[word] = coefs   
  42. f.close()   
  43.   
  44. embedding_dim = 200   
  45.   
  46. # Get 200-dim dense vector for each of the words in out vocabulary   
  47. embedding_matrix = np.zeros((vocab_size, embedding_dim))   
  48.   
  49. for word, i in wordtoix.items():   
  50. embedding_vector = embeddings_index.get(word)   
  51. if embedding_vector is not None:   
  52. embedding_matrix[i] = embedding_vector  
  53.   

讓我們接收下這段代碼:

第1至5行:將所有訓(xùn)練圖像的所有描述提取到一個(gè)列表中

第9-18行:僅選擇詞匯中出現(xiàn)次數(shù)超過(guò)10次的單詞

第21–30行:創(chuàng)建一個(gè)要索引的單詞和一個(gè)對(duì)單詞詞典的索引。

第33–42行:將Glove Embeddings加載到字典中,以單詞作為鍵,將vector嵌入為值

第44–52行:使用上面加載的嵌入為詞匯表中的單詞創(chuàng)建嵌入矩陣

數(shù)據(jù)準(zhǔn)備

這是該項(xiàng)目最重要的方面之一。 對(duì)于圖像,我們需要使用Inception V3模型將它們轉(zhuǎn)換為固定大小的矢量,如前所述。

  1. # Below path contains all the images   
  2. all_images_path = 'dataset/Flickr8k_Dataset/Flicker8k_Dataset/'   
  3. Create a list of all image names in the directory   
  4. all_images = glob.glob(all_images_path + '*.jpg')   
  5.   
  6. Create a list of all the training and testing images with their full path names   
  7. def create_list_of_images(file_path):   
  8. images_names = set(open(file_path, 'r').read().strip().split('\n'))   
  9. images = []   
  10.   
  11. for image in all_images:   
  12. if image[len(all_images_path):] in image_names:   
  13. images.append(image)   
  14.   
  15. return images   
  16.   
  17.   
  18. train_images_path = 'dataset/Flickr8k_text/Flickr_8k.trainImages.txt'   
  19. test_images_path = 'dataset/Flickr8k_text/Flickr_8k.testImages.txt'   
  20.   
  21. train_images = create_list_of_images(train_images_path)   
  22. test_images = create_list_of_images(test_images_path)   
  23.   
  24. #preprocessing the images   
  25. def preprocess(image_path):   
  26. img = image.load_img(image_path, target_size=(299, 299))   
  27. x = image.img_to_array(img)   
  28. x = np.expand_dims(x, axis=0)   
  29. x = preprocess_input(x)   
  30. return x   
  31.   
  32. Load the inception v3 model   
  33. model = InceptionV3(weights='imagenet')   
  34.   
  35. Create a new model, by removing the last layer (output layer) from the inception v3   
  36. model_new = Model(model.input, model.layers[-2].output)   
  37.   
  38. # Encoding a given image into a vector of size (2048, )   
  39. def encode(image):   
  40. image = preprocess(image)   
  41. fea_vec = model_new.predict(image)   
  42. fea_vec = np.reshape(fea_vec, fea_vec.shape[1])   
  43. return fea_vec   
  44.   
  45.   
  46. encoding_train = {}   
  47. for img in train_images:   
  48. encoding_train[img[len(all_images_path):]] = encode(img)   
  49.   
  50.   
  51. encoding_test = {}   
  52. for img in test_images:   
  53. encoding_test[img[len(all_images_path):]] = encode(img)   
  54.   
  55. # Save the bottleneck features to disk   
  56. with open("encoded_files/encoded_train_images.pkl""wb"as encoded_pickle:   
  57. pickle.dump(encoding_train, encoded_pickle)   
  58.   
  59. with open("encoded_files/encoded_test_images.pkl""wb"as encoded_pickle:   
  60. pickle.dump(encoding_test, encoded_pickle)   
  61.   
  62.   
  63. train_features = load(open("encoded_files/encoded_train_images.pkl""rb"))  
  1. 第1-22行:將訓(xùn)練和測(cè)試圖像的路徑加載到單獨(dú)的列表中
  2. 第25–53行:循環(huán)訓(xùn)練和測(cè)試集中的每個(gè)圖像,將它們加載為固定大小,對(duì)其進(jìn)行預(yù)處理,使用InceptionV3模型提取特征,最后對(duì)其進(jìn)行重塑。
  3. 第56–63行:將提取的特征保存到磁盤(pán)

現(xiàn)在,我們不會(huì)一次預(yù)測(cè)所有的標(biāo)題文字,因?yàn)槲覀儾恢皇菍D像提供給計(jì)算機(jī),并要求它為其生成文字。 我們要做的就是給它圖像的特征向量,以及標(biāo)題的第一個(gè)單詞,并讓它預(yù)測(cè)第二個(gè)單詞。 然后我們給它給出前兩個(gè)單詞,并讓它預(yù)測(cè)第三個(gè)單詞。 讓我們考慮數(shù)據(jù)集部分中給出的圖像和標(biāo)題“一個(gè)女孩正在進(jìn)入木結(jié)構(gòu)建筑”。 在這種情況下,在添加令牌“ startseq”和“ endseq”之后,以下分別是我們的輸入(Xi)和輸出(Yi)。

使用機(jī)器學(xué)習(xí)生成圖像描述

此后,我們將使用我們創(chuàng)建的“索引”字典來(lái)更改輸入和輸出中的每個(gè)詞以映射索引。 在進(jìn)行批處理時(shí),我們希望所有序列的長(zhǎng)度均等,這就是為什么要在每個(gè)序列后附加0直到它們成為最大長(zhǎng)度(如上所述計(jì)算為34)的原因。 正如人們所看到的那樣,這是大量的數(shù)據(jù),將其立即加載到內(nèi)存中是根本不可行的,為此,我們將使用一個(gè)數(shù)據(jù)生成器將其加載到小塊中降低是用的內(nèi)存。

  1. # data generator, intended to be used in a call to model.fit_generator()   
  2. def data_generator(descriptions, photos, wordtoix, max_length, num_photos_per_batch):   
  3. X1, X2, y = list(), list(), list()   
  4. n=0   
  5. # loop for ever over images   
  6. while 1:   
  7. for key, desc_list in descriptions.items():   
  8. n+=1   
  9. # retrieve the photo feature   
  10. photo = photos[key+'.jpg']   
  11. for desc in desc_list:   
  12. # encode the sequence   
  13. seq = [wordtoix[word] for word in desc.split(' ') if word in wordtoix]   
  14. # split one sequence into multiple X, y pairs   
  15. for i in range(1, len(seq)):   
  16. # split into input and output pair   
  17. in_seq, out_seq = seq[:i], seq[i]   
  18. # pad input sequence   
  19. in_seq = pad_sequences([in_seq], maxlen=max_length)[0]   
  20. # encode output sequence   
  21. out_seq = to_categorical([out_seq], num_classes=vocab_size)[0]   
  22. # store   
  23. X1.append(photo)   
  24. X2.append(in_seq)   
  25. y.append(out_seq)   
  26. # yield the batch data   
  27. if n==num_photos_per_batch:   
  28. yield [[array(X1), array(X2)], array(y)]   
  29. X1, X2, y = list(), list(), list()   
  30. n=0  

上面的代碼遍歷所有圖像和描述,并生成表中的數(shù)據(jù)項(xiàng)。 yield將使函數(shù)再次從同一行運(yùn)行,因此,讓我們分批加載數(shù)據(jù)

模型架構(gòu)和訓(xùn)練

如前所述,我們的模型在每個(gè)點(diǎn)都有兩個(gè)輸入,一個(gè)輸入特征圖像矢量,另一個(gè)輸入部分文字。 我們首先將0.5的Dropout應(yīng)用于圖像矢量,然后將其與256個(gè)神經(jīng)元層連接。 對(duì)于部分文字,我們首先將其連接到嵌入層,并使用如上所述經(jīng)過(guò)GLOVE訓(xùn)練的嵌入矩陣的權(quán)重。 然后,我們應(yīng)用Dropout 0.5和LSTM(長(zhǎng)期短期記憶)。 最后,我們將這兩種方法結(jié)合在一起,并將它們連接到256個(gè)神經(jīng)元層,最后是一個(gè)softmax層,該層預(yù)測(cè)我們?cè)~匯中每個(gè)單詞的概率。 可以使用下圖概括高級(jí)體系結(jié)構(gòu):

 

使用機(jī)器學(xué)習(xí)生成圖像描述

 

以下是訓(xùn)練期間選擇的超參數(shù):損失被選擇為“categorical-loss entropy”,優(yōu)化器為“Adam”。 該模型總共訓(xùn)練了30輪,但對(duì)于前20輪,批次大小和學(xué)習(xí)率分別為0.001和3,而接下來(lái)的10輪分別為0.0001和6。

  1. inputs1 = Input(shape=(2048,))   
  2. fe1 = Dropout(0.5)(inputs1)   
  3. fe2 = Dense(256, activation='relu')(fe1)   
  4. inputs2 = Input(shape=(max_length1,))   
  5. se1 = Embedding(vocab_size, embedding_dim, mask_zero=True)(inputs2)   
  6. se2 = Dropout(0.5)(se1)   
  7. se3 = LSTM(256)(se2)   
  8. decoder1 = add([fe2, se3])   
  9. decoder2 = Dense(256, activation='relu')(decoder1)   
  10. outputs = Dense(vocab_size, activation='softmax')(decoder2)   
  11. model = Model(inputs=[inputs1, inputs2], outputs=outputs)   
  12.   
  13. model.layers[2].set_weights([embedding_matrix])   
  14. model.layers[2].trainable = False   
  15.   
  16. model.compile(loss='categorical_crossentropy', optimizer='adam')   
  17.   
  18. epochs = 20   
  19. number_pics_per_batch = 3   
  20. steps = len(train_descriptions)//number_pics_per_batch   
  21.   
  22. generator = data_generator(train_descriptions, train_features, wordtoix, max_length1, number_pics_per_batch)   
  23. history = model.fit_generator(generator, epochs=20, steps_per_epoch=steps, verbose=1)   
  24.   
  25.   
  26. model.optimizer.lr = 0.0001   
  27. epochs = 10   
  28. number_pics_per_batch = 6   
  29. steps = len(train_descriptions)//number_pics_per_batch   
  30.   
  31. generator = data_generator(train_descriptions, train_features, wordtoix, max_length1, number_pics_per_batch)   
  32. history1 = model.fit_generator(generator, epochs=10, steps_per_epoch=steps, verbose=1)   
  33. model.save('saved_model/model_' + str(30) + '.h5')  

讓我們來(lái)解釋一下代碼:

第1-11行:定義模型架構(gòu)

第13–14行:將嵌入層的權(quán)重設(shè)置為上面創(chuàng)建的嵌入矩陣,并且還設(shè)置trainable = False,因此該層將不再受任何訓(xùn)練

第16–33行:如上所述,使用超參數(shù)在兩個(gè)單獨(dú)的間隔中訓(xùn)練模型

推理

下面顯示了前20輪的訓(xùn)練損失,然后是接下來(lái)的10輪的訓(xùn)練損失:

使用機(jī)器學(xué)習(xí)生成圖像描述

為了進(jìn)行推斷,我們編寫(xiě)了一個(gè)函數(shù),該函數(shù)根據(jù)我們的模型(即貪心)將下一個(gè)單詞預(yù)測(cè)為具有最大概率的單詞

  1. def greedySearch(photo):   
  2. in_text = 'startseq'   
  3. for i in range(max_length1):   
  4. sequence = [wordtoix[w] for w in in_text.split() if w in wordtoix]   
  5. sequence = pad_sequences([sequence], maxlen=max_length1)   
  6. yhat = model.predict([photo,sequence], verbose=0)   
  7. yhat = np.argmax(yhat)   
  8. word = ixtoword[yhat]   
  9. in_text += ' ' + word   
  10. if word == 'endseq':   
  11. break   
  12. final = in_text.split()   
  13. final = final[1:-1]   
  14. final = ' '.join(final)   
  15. return final   
  16.   
  17. z=1   
  18. pic = list(encoding_test.keys())[999]   
  19. image = encoding_test[pic].reshape((1,2048))   
  20. x=plt.imread(images+pic)   
  21. plt.imshow(x)   
  22. plt.show()   
  23. print("Greedy:",greedySearch(image))  
使用機(jī)器學(xué)習(xí)生成圖像描述

效果還不錯(cuò)

 

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2018-01-15 15:58:17

機(jī)器學(xué)習(xí)色彩還原k-means算法

2022-06-05 21:16:08

機(jī)器學(xué)習(xí)Python

2022-05-19 10:27:34

機(jī)器學(xué)習(xí)人工智能

2017-05-03 19:08:10

機(jī)器學(xué)習(xí)

2022-06-09 09:14:31

機(jī)器學(xué)習(xí)PythonJava

2024-09-09 11:45:15

ONNX部署模型

2023-11-22 13:10:01

2017-09-01 18:17:40

2022-08-15 15:16:20

機(jī)器學(xué)習(xí)圖片深度學(xué)習(xí)

2023-02-03 11:40:49

機(jī)器學(xué)習(xí)分析情感

2019-09-30 10:12:21

機(jī)器學(xué)習(xí)數(shù)據(jù)映射

2017-07-07 14:41:13

機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)JavaScript

2022-07-13 09:00:00

機(jī)器學(xué)習(xí)eBay數(shù)據(jù)

2021-11-02 09:40:50

TensorFlow機(jī)器學(xué)習(xí)人工智能

2017-08-25 14:29:43

機(jī)器學(xué)習(xí)Java

2009-09-29 16:48:42

Hibernate J

2019-12-03 10:22:50

AWSAI亞馬遜

2017-09-09 06:04:22

深度學(xué)習(xí)人物圖像神經(jīng)網(wǎng)絡(luò)

2010-07-02 08:53:06

MIS SQL Ser

2022-04-01 15:39:13

機(jī)器學(xué)習(xí)讓孩子們軟件交付
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)