用自己的資料,製作python版本的cifar10資料集
前期準備:3通道圖片60000張,如果你沒有那麼大的資料量,需要改變cifar-10-API中的定義,下面會具體說到。
如果你的圖片是灰度圖(單通道)可以用這種方法來改為三通道:
opencv將灰度圖轉化為RGB三通道影象
要求為python2.7版本,由於cifar10就是在python2.7下面定義的,用python3版本與2.7版本最主要的不同是在2.7版本中打包模組為cPickle,而在python3中為pickle。在cifar-10-API中開啟二進位制檔案為cPickle。
有任何問題的可以在下方留言,或者郵箱留言:[email protected]
1、將圖片轉化為32*32的三通道圖片
def img_tra():
for k in range(0,num):
currentpath=folder+"/"+imglist[k]
im=Image.open(currentpath)
#width=im.size[0]
#height=im.size[1]
x_s=32
y_s=32
out = im.resize((x_s,y_s),Image.ANTIALIAS)
out.save(folder_ad+"/"+str(imglist[k]))
2、進行進行畫素點操作。
python版本的cifar資料集格式為在一個字典中存在batch_label,labels,data,filenames四種資訊,其中batch_label與filenames為utf-8編碼的字串,data為uint8編碼的numpy陣列,labels為utf-8編碼的列表。先將條桶圖片轉化為32*32的RGB圖,然後依次讀取RGB通道畫素值,存入3*1024numpy陣列,圖片標籤存入labels,圖片名存入filenames,將其打包成一個二進位制檔案。
下圖是開啟官方cifar資料集檔案內容(6個檔案都一樣,以data_batch_1為例)
import cPickle as p
import numpy as np
import chardet
def unpickle(file):
import cPickle
with open(file, 'rb') as fo:
dict = cPickle.load(fo, encoding='latin-1')
return dict
cc=unpickle("J:/get4/data_atch_1")
print(cc)
開啟後為:
我們將點操作與寫檔案寫在一個函式mkcf()函式中:
def mkcf():
global data
global list1
global list2
global list3
global list4
for k in range(0,num):
currentpath=folder_ad+"/"+imglist[k]
im=Image.open(currentpath)
with open(binpath, 'a') as f:
for i in range (0,32):
for j in range (0,32):
cl=im.getpixel((i,j))
#print(imglist[k])
#print(type(cl[0]))
#with open(binpath, 'a') as f:
#print(str(cl[0]))
list1.append(cl[0])
#print(list1)
for i in range (0,32):
for j in range (0,32):
cl=im.getpixel((i,j))
#with open(binpath, 'a') as f:
#mid=str(cl[1])
#f.write(mid)
list1.append(cl[1])
for i in range (0,32):
for j in range (0,32):
cl=im.getpixel((i,j))
#with open(binpath, 'a') as f:
#mid=str(cl[2])
#f.write(mid)
list1.append(cl[2])
list2.append(list1)
list1=[]
#arr2=np.array(list2)
#print(arr4)
f.close()
print("image"+str(k+1)+"saved.")
list3.append(imglist[k].encode('utf-8'))
arr2=np.array(list2,dtype=np.uint8)
data['batch_label'.encode('utf-8')]='testing batch 1 of 1'.encode('utf-8')
#addWord(cifar10,"batch_label".encode('utf-8'),'training batch 5 of 5'.encode('utf-8'))
data.setdefault('labels'.encode('utf-8'),label)
data.setdefault('data'.encode('utf-8'),arr2)
#addWord(cifar10,'labels'.encode('utf-8'),label)
#addWord(cifar10,'data'.encode('utf-8'),arr2)
data.setdefault('filenames'.encode('utf-8'),list3)
#addWord(cifar10,'filenames'.encode('utf-8'),list3)
output = open(binpath, 'wb')
pickle.dump(data, output)
output.close()
3、總體程式碼貼上如下
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 18 14:17:45 2017
@author: ielij
"""
import numpy as np
from PIL import Image
import operator
from os import listdir
import sys
import cPickle as pickle
import random
data={}
list1=[]
list2=[]
list3=[]
def img_tra():
for k in range(0,num):
currentpath=folder+"/"+imglist[k]
im=Image.open(currentpath)
#width=im.size[0]
#height=im.size[1]
x_s=32
y_s=32
out = im.resize((x_s,y_s),Image.ANTIALIAS)
out.save(folder_ad+"/"+str(imglist[k]))
def addWord(theIndex,word,adder):
theIndex.setdefault(word,[]).append(adder)
def seplabel(fname):
filestr=fname.split(".")[0]
label=int(filestr.split("_")[0])
return label
def mkcf():
global data
global list1
global list2
global list3
for k in range(0,num):
currentpath=folder_ad+"/"+imglist[k]
im=Image.open(currentpath)
with open(binpath, 'a') as f:
for i in range (0,32):
for j in range (0,32):
cl=im.getpixel((i,j))
list1.append(cl[0])
for i in range (0,32):
for j in range (0,32):
cl=im.getpixel((i,j))
#with open(binpath, 'a') as f:
#mid=str(cl[1])
#f.write(mid)
list1.append(cl[1])
for i in range (0,32):
for j in range (0,32):
cl=im.getpixel((i,j))
list1.append(cl[2])
list2.append(list1)
list1=[]
f.close()
print("image"+str(k+1)+"saved.")
list3.append(imglist[k].encode('utf-8'))
arr2=np.array(list2,dtype=np.uint8)
data['batch_label'.encode('utf-8')]='testing batch 1 of 1'.encode('utf-8')
data.setdefault('labels'.encode('utf-8'),label)
data.setdefault('data'.encode('utf-8'),arr2)
data.setdefault('filenames'.encode('utf-8'),list3)
output = open(binpath, 'wb')
pickle.dump(data, output)
output.close()
folder="H:/VOC2007/test_ad"
folder_ad="H:/VOC2007/test_rs"
imglist=listdir(folder_ad)
num=len(imglist)
img_tra()
label=[]
for i in range (0,num):
label.append(seplabel(imglist[i]))
binpath="H:/VOC2007/get4/test_batch"
print(binpath)
mkcf()
需要說明一點,圖片儲存格式為:0_126.jpg,其中0為標籤,得到標籤的方式為(此函式已在總程式碼裡)
def seplabel(fname):
filestr=fname.split(".")[0]
label=int(filestr.split("_")[0])
return label
4、結果展示
100張精度
1000張精度
相關推薦
用自己的資料,製作python版本的cifar10資料集
前期準備:3通道圖片60000張,如果你沒有那麼大的資料量,需要改變cifar-10-API中的定義,下面會具體說到。 如果你的圖片是灰度圖(單通道)可以用這種方法來改為三通道: opencv將灰度圖轉化為RGB三通道影象 要求為python2.7版本,
Python版本的資料結構書_《用Python解決資料結構與演算法問題》
源於經典 資料結構作為計算機從業人員的必備基礎,Java, c 之類的語言有很多這方面的書籍,Python 相對較少, 其中比較著名的一本 problem-solving-with-algorithms-and-data-structure-using-pyt
python讀取cifar10資料集
最近學習卷積網路用到cifar10資料集,自己寫了一個工具類,用來讀取已經下載到本地的cifar10資料集。 程式碼寫的不算好,但是自己用起來還可以。所以放到網上,有需要的可以拿去用。程式碼比較少,所以沒有寫註釋。下面介紹一下實現的功能。完整的程式碼可以在github上下載。地址:https:/
深圳資料中心API-Python版本
# -*- coding: UTF-8 -*- _author_ = 'zy' _date_ = '2018/12/10 0010 19:56' import requests,pymongo,json,time APPKEY=‘’ appid='357415058' url='http
Python-Numpy多維陣列--來自現有資料的資料,來自數值範圍的資料
一、NumPy 來自現有資料的陣列 1.numpy.asarray此函式類似於numpy.array,除了它有較少的引數。 這個例程對於將 Python 序列轉換為ndarray非常有用。 numpy.asarray(a, dtype = None, order = None) 構造器接
python 在excel檔案中寫入date日期資料,以及讀取excel日期資料,如何在python中正確顯示date日期。
如何通過python寫入date資料了? 寫入還是很簡單的。 import xlwt3 import datetime as dt workbook = xlwt.Workbook() worksheet = workbook.add_sheet('Sheet1') wo
更新Python2.6.6至2.7.8之後,檢視Python版本依然是2.6.6
1.下載2.7.8版本wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgztar zxvf Python-2.7.8.tgz2.進入到解壓檔案cd Python-2.7.8 ./configure --pr
Python超越R,為何Python攀上資料科學巔峰?
根據 KDnuggets最新調查,Python 生態系統已經超過了 R,成為了資料分析、資料科學
SQL與eclipse的連線,從資料庫讀取表資料,將二維陣列資料匯入表
示例: import java.util.List; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; impor
按結束日期往前推30天,12個周,12個月獲取資料,補齊缺失的資料
public List<Integer> getThirtyDates() { List<Integer> weeks = new ArrayList<Integer>(); long endTime = LDateTime.getTime(LDa
專案--點選按鈕顯示資料,點選空白處隱藏資料
點選空白處隱藏資料 點選按鈕顯示資料在這裡插入程式碼片 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <
MySQL操作的時候,發現輸入當前資料,資料庫中儲存的資料總比輸入的要小8個小時
在使用mybatis進行MySQL操作的時候,發現輸入當前資料,資料庫中儲存的資料總比輸入的要小8個小時,幾經搜尋找到了原因,原來是因為mybatis配置檔案中 <property name="url" value="jdbc:mysql://localhost:3306/mybatisD
出行大資料,滴滴釋出400城資料視覺化分析
2017年,滴滴基於出行的大資料探討了城市連線、夜間出行、公共交通與網約車、智慧交通形態等多個熱
資料庫有資料,但查詢不到資料,沒查到還爆空指標
今天在做springMVC專案的時候,因為粗心,忘了在控制層注入service的類上面加上@Autowired,執行程式碼就一直報空指標,把hql翻譯成sql放入資料庫查詢
laravel-admin表單提交隱藏一些資料,回撥時獲取資料
laravel-admin表單提交隱藏一些資料,回撥時獲取資料 表單提交時隱藏資料 回撥時獲取資料 獲取提交資料 獲取隱藏提交中的資料 表單提交時隱藏資料 讀取最後一條的插入資料,但這樣會造成如果兩條資料同時插
oracle刪除重複資料,只留一條資料
--worked well。可以刪除重複記錄,對於多個欄位也是一樣的原理 delete from T_USER where id in (select id from T_USER group b
資料分析:Python分析學生資料
本文為優達學城資料分析入門課程的mini專案,所用資料集為優達學城某段時間內的學生資料。 資料簡介 全部資料包含三個檔案,其內容分別為: enrollments.csv: daily-engagement.csv project-submis
C#操作dataGridView新增資料庫中資料,刪除dataGridView中的資料
private void btn_AddData_Click(object sender,EventArgs e)//資料新增 { //方法一 //stringid = "4"; //stringname = "Jim
list集合轉換成json資料,ajax請求返回json資料,再通過迴圈顯示出來
之前在網上查了很多關於迴圈顯示ajax返回值的方法,很多都不對的,顯示不了我要的結果。後來自己鼓搗出來了,發出來分享一下自己的成果。因為ajax不能返回集合的,需要把集合list轉換成json返回,再用迴圈的方式,顯示出結果。 操作層 //編碼方式request.set
每次選中陣列中的N條資料, 如果讓每條資料被選中的次數做到平均??
經常有這樣的需求, 有一組資料, 每次展示其中的1條或N條,希望每條資料展示量可以做到平均。 一開始想依次展示每條資料並做記錄,整組資料全展示一遍之後清除記錄, 然後一直迴圈下去。 實現的過程中又覺得這個方法太麻煩, 可以每次先打亂陣列, 然後取其中的前N條來顯示, 這樣應該可以保證每條資料被選中的概率差