神經(jīng)網(wǎng)絡(luò)入門(mén)(7)

MachineLearninginMarketing
# 形狀 [307]
x = tf.placeholder(tf.float32, [None, 3072])
# [None]
y = tf.placeholder(tf.int64, [None])
# get_variable 表示如果已經(jīng)定義了 w 就使用定義好的 w杈湾,如果沒(méi)有定義新建一個(gè)變量 w
# (3072,1)
w = tf.get_variable('w', [x.get_shape()[-1], 1], initializer=tf.random_normal)
# (1,)
b = tf.get_variable('b', [1], initializer=tf.constant_initializer(0.0))
# y_ 將 w * x + b 現(xiàn)在
# [None,3072],[3072,1] = [None,1] (None,1)
y_ = tf.matmul(x, w) + b
# y_ 還只是一個(gè)內(nèi)積值,我們可以將其變成一個(gè)概率值骄瓣,變成概率值的方法是使用函數(shù) sigmoid 中對(duì)其進(jìn)行壓縮
# [None,1]
p_y_1 = tf.nn.sigmoid(y_)
# 得到概率為 1 的值就可以和真正 y 進(jìn)行差別分析,以為 y 的形狀(None) 和 p_y_1(None,1)不一樣需要進(jìn)行形狀修改
y_reshaped = tf.reshape(y, (-1, 1))

# 以為在 tensorFlow 對(duì)數(shù)據(jù)類型比較敏感派近,我們需要將 y_resphapded 類型從 int64 修改Wie float32
y_reshaped_float = tf.cast(y_reshaped, tf.float32)

# reduce_mean 是就均值而 square 是求平方
loss = tf.reduce_mean(tf.square(y_reshaped_float - p_y_1))

# 預(yù)測(cè)值通過(guò)將 p_y_1 和 0.5 進(jìn)行比較得到 true 或 false 來(lái)表預(yù)測(cè)值
predict = p_y_1 > 0.5
# [1,0,1,1,0,0,1]
correct_prediction = tf.equal(tf.cast(predict, tf.int64), y_reshaped)
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float64))

class CifarData:
    def __init__(self,filenames, need_shuffle):
        all_data = []
        all_labels = []
        for filename in filenames:
            data, labels = load_data(filename)

            for item, label in zip(data, labels):
                if label in [0,1]:
                    all_data.append(item)
                    all_labels.append(label)
        self._data = np.vstack(all_data)
        self._labels = np.hstack(all_labels)
        self._num_examples = self._data.shape[0]
        print(self._num_examples)
        self._need_shuffle = need_shuffle
        self._indicator = 0
        if self._need_shuffle:
            self._shuffle_data()

定義一個(gè)類 CifarData 來(lái)控制數(shù)據(jù)涧郊,need_shuffle 作為一個(gè)控制是否對(duì)數(shù)據(jù)進(jìn)行重新排序(洗牌)的標(biāo)識(shí)飒泻,當(dāng)我們處理訓(xùn)練數(shù)據(jù)集時(shí)候可以通過(guò)開(kāi)啟 need_shuffle 來(lái)得到更多隨機(jī)樣本,而對(duì)于測(cè)試數(shù)據(jù)集則不會(huì)開(kāi)啟該開(kāi)關(guān)噪窘。

 all_data = []
        all_labels = []
        for filename in filenames:
            data, labels = load_data(filename)

使用之間的 data_load 方法將文件中數(shù)據(jù)加載進(jìn)來(lái)笋庄。

 for item, label in zip(data, labels):
                if label in [0,1]:
                    all_data.append(item)
                    all_labels.append(label)

因?yàn)槲覀兲幚矶诸惖臄?shù)據(jù)集所有通過(guò)過(guò)濾得到標(biāo)簽為 0 或 1 的數(shù)據(jù)集

        self._data = np.vstack(all_data)
        self._labels = np.hstack(all_labels)

通過(guò)合并后轉(zhuǎn)換為 numpy 中的矩陣,vstack 將按縱向進(jìn)行合并形成一個(gè)矩陣倔监,而 hstack 則是按橫向進(jìn)行合并形成矩陣直砂。

self._num_examples = self._data.shape[0]

定義有多少個(gè)向量,然后就是定義 suffle 函數(shù)浩习,

    def _shuffle_data(self):
        p = np.random.permutation(self._num_examples)
        self._data = self._data[p]
        self._labels = self._labels[p]

首先通過(guò) random.permutation 得到一個(gè)排列哆键,這個(gè)函數(shù)從 0 到 _num_examples 進(jìn)行一個(gè)混排,然后用 p 對(duì) data 和 p 集合進(jìn)行洗牌瘦锹。

    def next_batch(self,batch_size):
        end_indicator = self._indicator + batch_size
        if end_indicator > self._num_examples:
            if self._need_shuffle:
                self._shuffle_data()
            else:
                raise Exception("have no more examples")
        if end_indicator > self._num_examples:
            raise Exception("batch size is larger than all examples")
        batch_data = self._data[self._indicator:end_indicator]
        batch_labels = self._labels[self._indicator:end_indicator]
        self._indicator = end_indicator
        return batch_data,batch_labels

定義 next_batch 樣本籍嘹,會(huì)返回 batch_size 個(gè)樣本,

        end_indicator = self._indicator + batch_size
        if end_indicator > self._num_examples:
            if self._need_shuffle:
                self._shuffle_data()
                self._indicator = 0
                end_indicator = batch_size
            else:
                raise Exception("have no more examples")

如果 end_indicator 大于 self._num_examples 表示我們?nèi)≈禈颖镜慕刂刮恢贸隽藰颖緮?shù)弯院,這時(shí)如果是訓(xùn)練數(shù)據(jù)集就需要重新洗牌然后繼續(xù)獲取數(shù)據(jù)辱士,但如果不是訓(xùn)練數(shù)據(jù)集則拋出一個(gè)異常。

 batch_data = self._data[self._indicator:end_indicator]
        batch_labels = self._labels[self._indicator:end_indicator]
        self._indicator = end_indicator
        return batch_data, batch_labels

將這batch_size 間數(shù)據(jù)返回去听绳。

        self._data = np.vstack(all_data)
        self._labels = np.hstack(all_labels)
        # 測(cè)試
        print(self._data.shape)
        print(self._labels.shape)
        self._num_examples = self._data.shape[0]

在這個(gè)位置輸出一下颂碘,測(cè)試一下我們創(chuàng)建好的類是否正常工作

train_filenames = [os.path.join(CIFAR_DIR, 'data_batch_%d' % i)
                   for i in range(1, 6)]
test_filenames = [os.path.join(CIFAR_DIR, 'test_batch')]

train_data = CifarData(train_filenames, True)

我們知道訓(xùn)練數(shù)據(jù)集應(yīng)該有 50000 樣本以為每一個(gè) data_batch 有一個(gè) 10000 樣本,而又 0 - 9 十個(gè)類別(也就是圖片的類別)而因?yàn)檫^(guò)濾為 0椅挣,1 所以只要 10000 個(gè)數(shù)據(jù)

(10000, 3072)
(10000,)
batch_data, batch_labels = train_data.next_batch(10)
print(batch_data, batch_labels)
[[208 186 128 ... 100  97  97]
 [ 55  59  65 ...  55  52  52]
 [223 223 226 ...  61  58  52]
 ...
 [160 111  71 ...  48  48  51]
 [105 105 105 ...  50  50  49]
 [252 248 248 ...  93  98  97]] [1 0 1 1 0 0 1 1 0 1]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末头岔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鼠证,更是在濱河造成了極大的恐慌峡竣,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件量九,死亡現(xiàn)場(chǎng)離奇詭異适掰,居然都是意外死亡颂碧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)类浪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)载城,“玉大人,你說(shuō)我怎么就攤上這事费就∷咄撸” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵力细,是天一觀的道長(zhǎng)睬澡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)艳汽,這世上最難降的妖魔是什么猴贰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任对雪,我火速辦了婚禮河狐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瑟捣。我一直安慰自己馋艺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布迈套。 她就那樣靜靜地躺著捐祠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桑李。 梳的紋絲不亂的頭發(fā)上踱蛀,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音贵白,去河邊找鬼率拒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛禁荒,可吹牛的內(nèi)容都是我干的猬膨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼呛伴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼勃痴!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起热康,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沛申,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后姐军,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體污它,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衫贬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片德澈。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖固惯,靈堂內(nèi)的尸體忽然破棺而出梆造,到底是詐尸還是另有隱情,我是刑警寧澤葬毫,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布镇辉,位于F島的核電站,受9級(jí)特大地震影響贴捡,放射性物質(zhì)發(fā)生泄漏忽肛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一烂斋、第九天 我趴在偏房一處隱蔽的房頂上張望屹逛。 院中可真熱鬧,春花似錦汛骂、人聲如沸罕模。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)淑掌。三九已至,卻和暖如春蝶念,著一層夾襖步出監(jiān)牢的瞬間抛腕,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工媒殉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留担敌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓适袜,卻偏偏與公主長(zhǎng)得像柄错,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子苦酱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容